編譯UHD與GNU Radio

發佈於2013年10月22日 -

這次花了差不多兩天時間才把GNU Radio編譯好,本文用來記錄編譯中遇到的問題與得到的經驗。

我是在Mac OS X 10.9上嘗試編譯安裝UHD和GNU Radio 3.6.2,由於機器上已經有了Homebrew,所以沒用MacPorts來安裝,而是手動編譯安裝。

整個過程中的大坑是OS X下的默認編譯器是clang,而gnuradio必須用gcc編譯,致命的是兩種工具不能互相鏈接。所以一定要選對合適的工具。

第一步,安裝依賴包。

gnuradio依賴的包可以在 這裏 找到,這些依賴包裏,boost和cppunit必須用gcc編譯,方法如下:

  1. 執行brew install apple-gcc42安裝gcc-4.2
  2. 執行brew install boost --use-gcc安裝boost
  3. 執行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裏去。