这次花了差不多两天时间才把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
里去。