我正在编写一个使用 TagLib 库的简单 C 程序。我最初将该库安装在/usr/local 中,并针对它编译并链接了我的程序。我已经完全删除了该库,并尝试链接到另一个位置的该库的编译版本。问题是,当我现在编译程序时,它编译得很干净,但是当尝试运行它时,我的程序正在寻找/usr/local/lib 中曾经存在的库,而不是新位置。例如,我的代码和新的 TagLib 库位于/Users/mdi/Code/tag 中。
我正在像这样编译我的程序:
cc main.c -Wall -I./taglib/bindings/c -o tag -L./taglib/bindings/c/.libs -ltag_c
就像我说的,编译完成,没有错误或警告。但是当尝试运行二进制文件时,我收到此错误:
dyld: Library not loaded: /usr/local/lib/libtag_c.0.dylib
Referenced from: /Users/mdi/Code/tag/./tag
Reason: image not found
Trace/BPT trap
在二进制文件上运行“otool -L”会显示:
tag:
/usr/local/lib/libtag_c.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
为什么它仍然尝试使用/usr/local/lib 中甚至不再存在的 TagLib 库,更重要的是,我该如何解决这个问题?
最佳答案
我不在 Mac 上开发,但我相信您的问题是您的库不在默认动态链接路径中。它因平台而异,但/usr/local/lib 是其中常见的一个,这就是为什么它显示为运行时链接的路径。
您可以更改分片库的默认搜索路径,但我不确定如何在 Mac 上执行此操作。您还应该能够在 session 中设置环境变量 DYLD_LIBRARY_PATH,以强制 dyld 在搜索默认目录之前搜索其他目录。
%> export DYLD_LIBRARY_PATH=/path/to/your/library:$DYLD_LIBRARY_PATH
在系统级别将目录添加到默认搜索路径比上面的环境变量解决方案更好,但我不知道如何在 Mac 上执行此操作。
编辑:
经过一番搜索,我发现了这个link您可能会发现它很有帮助。
关于c - Mac gcc 尝试链接旧的、不存在的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4979821/