Clang 无法找到 Homebrew 安装的 libportaudio

Clang 无法找到 Homebrew 安装的 libportaudio

我在 OS X 上使用 Homebrew 安装了 libportaudio。安装成功,并且我验证了/usr/local/include和中有指向实际头文件和库的符号链接/usr/local/lib

不过,我现在正在尝试makeRustlang 绑定(https://github.com/JeremyLetang/rust-portaudio) 来使用这些库。它失败并出现以下错误:

error: linking with `cc` failed: exit code: 1
note: cc '-m64' '-L' '/usr/local/lib/rustlib/x86_64-apple-darwin/lib' '-o' 'target/libportaudio.dylib' 'target/portaudio.o' '-Wl,-force_load,/usr/local/lib/rustlib/x86_64-apple-darwin/lib/libmorestack.a' 'target/portaudio.metadata.o' '-nodefaultlibs' '-fno-lto' '-Wl,-dead_strip' '-L' '/usr/local/lib/rustlib/x86_64-apple-darwin/lib' '-lstd-4e7c5e5c' '-L' '/usr/local/lib/rustlib/x86_64-apple-darwin/lib' '-lsync-4e7c5e5c' '-L' '/usr/local/lib/rustlib/x86_64-apple-darwin/lib' '-lrustrt-4e7c5e5c' '-L' 'target/deps' '-L' '/Users/drasa/repo/rust-portaudio/.rust' '-L' '/Users/drasa/repo/rust-portaudio' '-lportaudio' '-lSystem' '-lpthread' '-lc' '-lm' '-dynamiclib' '-Wl,-dylib' '-lcompiler-rt'
note: ld: warning: directory not found for option '-L/Users/drasa/repo/rust-portaudio/.rust'
ld: library not found for -lportaudio
clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: aborting due to previous error

因此,似乎cc不会从前缀 /usr/local 搜索库。应该这样吗?我该如何改变这种情况?自制软件安装的库应该开箱即用吗?

答案1

我通过设置解决了这个问题

export LIBRARY_PATH="/usr/local/lib"

设置 LIBRARY_PATH 之后,Cargo 也能顺利构建 rust-portaudio。

答案2

显然,rustc调用系统cc进行链接,但并未设置为/usr/local/lib/查找库。这可能是 Homebrew 软件包的错误rust。(它似乎确实在查找 下的头文件/usr/local/。)

或者,该rust-portaudio包可以使用pkg-config它来定位portaudio

我可以通过运行来让它进一步构建

make COMPILER='rustc -L/usr/local/lib'

但后来它遇到了其他我无法理解的错误。

相关内容