macOS下用Homebrew安装的Go包无法找到C头文件问题
解决go-soapy-sdr找不到SoapySDR头文件的问题
方法1:临时设置环境变量(当前终端有效)
直接在终端里配置cgo需要的头文件和库路径,再运行程序:
export CGO_CFLAGS="-I/opt/Homebrew/Cellar/soapysdr/0.8.1_1/include" export CGO_LDFLAGS="-L/opt/Homebrew/Cellar/soapysdr/0.8.1_1/lib" go run .
如果想长期生效,把前两行添加到你的shell配置文件(比如~/.zshrc或~/.bashrc)里,重启终端后就不用每次手动输入了。
方法2:命令行一次性传递参数
不用单独设置环境变量,直接把参数拼在go run命令前:
CGO_CFLAGS="-I/opt/Homebrew/Cellar/soapysdr/0.8.1_1/include" CGO_LDFLAGS="-L/opt/Homebrew/Cellar/soapysdr/0.8.1_1/lib" go run .
方法3:用pkg-config自动获取路径(推荐)
Homebrew安装的SoapySDR自带pkg-config配置文件,能自动生成正确的编译参数,不用硬写版本号:
# 让pkg-config找到SoapySDR的配置文件 export PKG_CONFIG_PATH="/opt/Homebrew/Cellar/soapysdr/0.8.1_1/lib/pkgconfig:$PKG_CONFIG_PATH" # 用pkg-config输出设置cgo参数 export CGO_CFLAGS="$(pkg-config --cflags soapysdr)" export CGO_LDFLAGS="$(pkg-config --libs soapysdr)" # 运行程序 go run .
以后SoapySDR更新版本,你只需要用Homebrew升级,不用改这些命令。
补充:检查Homebrew的默认链接
Homebrew通常会把库的头文件和动态库链接到/opt/Homebrew/include和/opt/Homebrew/lib,你可以先检查这些链接是否存在:
ls -l /opt/Homebrew/include/SoapySDR ls -l /opt/Homebrew/lib/libSoapySDR.dylib
如果没有链接,手动创建:
ln -s /opt/Homebrew/Cellar/soapysdr/0.8.1_1/include/SoapySDR /opt/Homebrew/include/SoapySDR ln -s /opt/Homebrew/Cellar/soapysdr/0.8.1_1/lib/libSoapySDR.dylib /opt/Homebrew/lib/libSoapySDR.dylib
创建完成后,直接运行go run .就能正常编译了。
内容的提问来源于stack exchange,提问作者Jim Orcheson
相关产品推荐
相关产品推荐

