Gnuradio 学习笔记(1)使用Visual Studio编译gnuradio

目标:使用 Visual Studio 编译gnuradio的示例程序dial_tone

一、装备环境

1、安装 Visual Studio 2010

2、安装 Boost 库

从 Boost 官网下载最新的源码包,解压后,按照 GnuRadio 源代码目录下的 README.building-boost 文件描述,对 Boost 库 进行编译安装 。打开一个 Visual Studio 2010 命令行窗口,运行:

bootstrap.bat

set BOOST_PREFIX=<path_to_install_boost_dir>

b2 --prefix=%BOOST_PREFIX% --with-thread --with-date_time --with-program_options --with-filesystem --with-system --with-test --with-regex --layout=versioned threading=multi install

【注1】:README.building-boost 文档中给出的命令没有 --with-test 和 --with-regex 两个参数,但是在编译的过程中用到了这两个库,因此我加上了这两个库。

【注2】:README.building-boost 文档中给出的命令中,variant=release 参数表示生成Boost 库的 release 版本。为了将来开发自己的程序调试方便,还需要 Boost 库的 debug 版本,因此我去掉了这个参数,同时生成 debug 和release 版本的Boost库

【注3】:如果安装了多个版本的 Visual Studio,则需要增加 toolset=msvc-10.0 指定使用Visual Studio 2010的编译器。我安装了Visual Studio 2013之后,即使从 Visual Studio 2010 命令行进行 Boost 库的编译,使用的也是2013的编译器(msvc-12.0)。

3、安装 Python

从Python官网下载Python 2.7.x,按照默认选项进行安装即可。安装完毕后,还需要安装 Cheetah 包,我是通过 pip 安装的 Cheetah 2.4.4,也可以到 Cheetah 官网下载离线安装。

4、安装 mingw-binutils

在用CMake 配置gnuradio源码时,需要指定 AT&T ASM 汇编器,安装 mingw-binutils 即可。事实上,在Windows平台下编译gnuradio,没有汇编文件需要处理,可能是在编写cmake脚本时偷懒了吧。

5、准备 FFTW

到fftw官网下载预编译的windows DLL文件,解压后按照README-WINDOWS 文件中的操作步骤,生成 libfftw3f-3.lib 这个库文件。

6、准备 cmake

从cmake官网下载最新的cmake工具,我使用的是3.3.0

二、使用 CMake 生成Visual Studio项目

准备一个空目录作为Cmake生成 Visual Studio 项目的输出目录。首先在cmake-gui中定义如下的CMake变量:

BOOST_ROOT

Boost 库安装目录路径,即上面提到的 %BOOST_PREFIX%

BOOST_ALL_DYN_LINK

设置为 False

Boost_INLCUDE_DIR

Boost 库头文件路径,即 %BOOST_PREFIX%/include/boost-1_57

Boost_LIBRARY_DIRS

Boost 库文件路径,即 %BOOST_PREFIX%/lib

CMAKE_ASM-ATT_COMPILER

AT&T ASM 汇编器路径,即 %MINGW_PREFIX%/bin/as.exe

FFTW3F_INCLUDE_DIRS

FFTW 库的头文件目录

FFTW3F_LIBRARIES

libfftw3f-3.lib 文件路径

CMAKE_INSTALL_PREFIX

安装 GnuRadio 的目录路径

然后点击 Configuration 按钮进行配置,CMake会列出所有相关的配置变量。勾选"Grouped"对列出的配置项分组查看,在"ENABLE"组下,去掉与dial_tone无关的模块,如下图:

然后再次点击"Configuration"进行配置,此时应当没有错误消息出现。最后点击"Generate"就可以生成 Visual Studio 解决方案和项目。

三、修改 gnuradio 源代码

gnuradio的源代码直接生成的 Visual Studio 工程编译会报错误,下面分别针对几个主要的错误进行解决。

1、error D8016: "/O2"和"/RTC1"命令行选项不兼容

该错误的产生是由于 CMake 脚本将 "/O2"这个优化参数添加到了 Debug 模式下的编译器参数中,解决方式是修改 gnuradio 源码根目录下的 CMakeLists.txt 文件,找到如下的内容,将两行SET命令注释掉:

# Append -O2 optimization flag for Debug builds 
#SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2") 
#SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O2") 

 

2、error C1083: 无法打开包括文 件:"pthread.h": No such file or directory

这个错误出现在编译 volk 模块的过程中,解决方法是修改 volk/lib/CMakeLists.txt,定位到下面的位置,增加标记为红色的内容:

 

######################################################################## 
# Set local include directories first 
######################################################################## 
include_directories( 
    ${CMAKE_BINARY_DIR}/include 
    ${CMAKE_SOURCE_DIR}/include 
    ${CMAKE_SOURCE_DIR}/kernels
    ${CMAKE_CURRENT_BINARY_DIR} 
    ${CMAKE_CURRENT_SOURCE_DIR} 
    "<path_to_pthreads_dir>/include" 
) 

 

3、error LNK1104: 无法打开文件"libboost_xxxxx-vc100-mt-gd-1_57.lib"

这个错误出现在编译 volk和gnuradio-runtime的过程中,解决方法是对下面的几个 CMakeLists.txt进行修改,增加标记为红色的内容:

(1) volk/apps/CMakeLists.txt

include_directories( 
    ${CMAKE_CURRENT_SOURCE_DIR} 
    ${CMAKE_CURRENT_BINARY_DIR} 
    ${CMAKE_SOURCE_DIR}/include 
    ${CMAKE_BINARY_DIR}/include 
    ${CMAKE_SOURCE_DIR}/lib 
    ${CMAKE_BINARY_DIR}/lib 
    ${Boost_INCLUDE_DIRS} 
) 
link_directories(${Boost_LIBRARY_DIRS}) 

(2) gnuradio-runtime/lib/CMakeLists.txt

include_directories(${GNURADIO_RUNTIME_INCLUDE_DIRS} 
                            ${CMAKE_CURRENT_SOURCE_DIR} 
                            ${CMAKE_CURRENT_BINARY_DIR}/../include/ 
                            ${VOLK_INCLUDE_DIRS} 
                            ${Boost_INCLUDE_DIRS} 
) 
link_directories(${Boost_LIBRARY_DIRS}) 

(3) gr-audio/examples/c++/CMakeLists.txt

 

include_directories( 
    ${GR_AUDIO_INCLUDE_DIRS} 
    ${GR_ANALOG_INCLUDE_DIRS} 
    ${GNURADIO_RUNTIME_INCLUDE_DIRS} 
    ${Boost_INCLUDE_DIRS} 
) 
link_directories(${Boost_LIBRARY_DIRS}) 

 

4、fatal error LNK1104: 无法打开文件"boost_unit_test_framework-vc100-mt-gd-1_57.lib"

这个错误发生在test_all项目生成过程中,解决方法是,修改volk/apps/CMakeLists.txt,找到如下代码位置,删掉红色删除线标记的内容。

if(Boost_FOUND) 
    set_source_files_properties( 
         ${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc PROPERTIES 
         COMPILE_DEFINITIONS "BOOST_TEST_DYN_LINK;BOOST_TEST_MAIN" 
    ) 

    …… 

endif(Boost_FOUND) 

 

四、编译和安装

打开 Visual Studio 2010命令提示,切换到 GnuRadio 的配置缓存(Cache)目录,运行:

msbuild install.vcxproj /p:configuration=release。生成的内容将会被安装到 CMAKE_INSTALL_PREFIX 所指出的目录中

 

五、运行 dial_tone

CMAKE_INSTALL_PREFIX/share/gnuradio/examples/audio 目录下,将 dial_tone.exe 复制到 CMAKE_INSTALL_PREFIX/bin 目录下,同时将 libfftw3f-3.dll 复制到 CMAKE_INSTALL_PREFIX/bin 目录下,双击 dial_tone.exe 运行,就可以听到声音了。

posted @ 2015-08-20 08:35  dozingcat  阅读(2203)  评论(0编辑  收藏  举报