這次花了差不多兩天時間才把GNU Radio編譯好,本文用來記錄編譯中遇到的問題與得到的經驗。
我是在Mac OS X 10.9上嘗試編譯安裝UHD和GNU Radio 3.6.2,由於機器上已經有了Homebrew,所以沒用MacPorts來安裝,而是手動編譯安裝。
整個過程中的大坑是OS X下的默認編譯器是clang,而gnuradio必須用gcc編譯,致命的是兩種工具不能互相鏈接。所以一定要選對合適的工具。
第一步,安裝依賴包。
gnuradio依賴的包可以在 這裏 找到,這些依賴包裏,boost和cppunit必須用gcc編譯,方法如下:
- 執行
brew install apple-gcc42
安裝gcc-4.2 - 執行
brew install boost --use-gcc
安裝boost - 執行
brew install cppunit --use-gcc
安裝cppunit
其他依賴大多可以直接用Homebrew或者pip安裝,但是qt系列除外。目前,在Mavericks上無法編譯qt 4.8.5,所以只能安裝二進制包。這意味着pyqt、qwt、pyqwt都需要手動安裝,只需要注意在配置這些包的時候指定好路徑就應該不會遇到困難了。
第二歩,編譯安裝UHD。
UHD可以從github上去clone得到。編譯之前,一定要在cmake中指定正確的路徑,特別是python,一定要使用同一個python,即如果用了Homebrew的python,那麼鏈接庫和庫目錄也要選擇Homebrew的。另外切記把編譯器換成gcc。
確認在執行cmake ..
後看到了需要的項目出現在enabled components中(特別是libuhd),然後編譯安裝即可。
第三步,編譯GNU Radio。
仔細設置cmake的各種路徑,注意觀察Gnuradio enabled components,確保你需要的模塊都出現,然後make即可。
make結束之後,如果執行make test
,OS X下會遇到一個udp的條目fail,我google了好久,似乎是因爲這部分代碼是針對Linux寫的,所以會有問題,網上也找不到解決方法。所幸udp source/sink並不常用。
至此,我總算在我的Mavericks裏裝好了GNU Radio,真是太不容易了。我還有一個問題,開發者們爲什麼不分發二進制代碼,來節省這麼多人的編譯時間呢?
如果你在編譯中遇到了問題,請一定反覆檢查自己的路徑是不是配置對了,遇到了鏈接錯誤請檢查編譯器是不是混用了。
P.S. 編譯Gen2 rfid模塊的時候,也遇到奇怪的問題了,由於種種原因,gruel的include
目錄是不對的,需要手動加到Makefile.common
裏去。