Gnuradio 學習筆記(1)使用Visual Studio編譯gnuradio

來源:互聯網
上載者:User

標籤:

目標:使用 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 運行,就可以聽到聲音了。

Gnuradio 學習筆記(1)使用Visual Studio編譯gnuradio

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.