5

所以,我正在构建一个项目,它使用来自已编译库(.dylib 或 .so)的函数。我在适当的位置有头文件和库文件(这是 QtRoot 的所有部分,顺便说一句),但是当我尝试在 Xcode 中构建我的项目时,我得到一个调试器错误:

dyld:库未加载:@rpath/libRIO.so 引用自:/Users/paulthompson/Documents/Programming/Build Products/Debug/MacHeliosSim.app/Contents/MacOS/MacHeliosSim 原因:找不到图像 sharedlibrary apply-load-rules all数据格式化程序暂时不可用,将在“继续”后重试。(目前无法调用加载器,已锁定。)

现在,如果我从 Finder 打开它,构建的程序本身将运行得很好,但是每当我尝试从 Xcode 运行它时,它就会向我吐口水。这个 rpath 是什么东西,为什么调试器找不到库,即使 Xcode 本身知道它们在哪里,而且显然从 Finder 运行的程序也可以找到它们?

4

2 回答 2

3

http://en.wikipedia.org/wiki/Rpath_(链接)

它是存储在二进制文件中的用于查找共享库的路径。当您从 Finder 启动应用程序时,它可能是一个应用程序包?创建应用程序包时,共享库被复制到应用程序包中,捆绑库的路径成为相对路径。(@executable_path/../Frameworks/foobar)。您是如何创建适用于 Finder 的版本的?

上述错误是否发生在链接时或从 xcode 启动应用程序时?(在后一种情况下,尝试使用 DYLD_LIBRARY_PATH)

此外,libRIO 的 .so 扩展名而不是 .dylib 看起来有点可疑。

于 2010-08-12T06:42:20.813 回答
2

在链接阶段添加 rpath,如下所示(在 qt creator 中)示例:

LIBS += -L/usr/local/root/lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lpthread -Wl, -rpath,/usr/local/root/lib -lm -ldl

于 2012-01-26T17:18:11.150 回答