ld: 找不到库文件

10

我正在尝试构建一个依赖于SDL2库的项目。我已经使用homebrew安装并链接了它:

> ls /usr/local/lib | grep SDL2
libSDL2-2.0.0.dylib
libSDL2.a
libSDL2.dylib
libSDL2_test.a
libSDL2main.a

我还将/usr/local/lib添加到了/etc/paths~/.bash_profile文件中:

> cat /etc/paths
/usr/local/lib
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

然而,当我尝试构建该项目时,仍然出现以下错误:
error: linking with `cc` failed: exit code: 1
note: cc '-m64' '-L' (...) '-lSDL2'
ld: library not found for -lSDL2
clang: error: linker command failed with exit code 1 (use -v to see invocation)

为什么会发生这种情况,我该如何修复它?
2个回答

17
我通过将/usr/local/lib添加到$LIBRARY_PATH中解决了问题:
对于bash,在~/.bash_profile中:
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/lib"

对于fish shell,位于~/.config/fish/config.fish中:

set -g -x LIBRARY_PATH $LIBRARY_PATH /usr/local/lib

1

/etc/paths 是用于可执行文件的,而不是共享库。与 .bash_profile 中设置的 $PATH 环境变量相同。这些路径是在您在终端中输入命令时搜索程序的路径。

您需要做的是更改链接器的链接路径。有关如何设置链接路径的详细信息,请参见 this question 的答案。


链接问题的答案建议更改对链接的调用,但我并没有自己调用它;相反,它是由其他用于编译项目的工具自动调用的。我能全局添加库路径吗? - Max Yankov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接