链接被抬高..什么是-rpath? MacOS X.

时间:2010-08-12 01:38:21

标签: xcode qt linker dynamic-linking rpath

所以,我正在构建一个项目,它使用编译库(.dylib或.so)中的函数。我在适当的位置有头文件和库文件(这是QtRoot,btw的所有部分),但是当我尝试在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运行的程序也可以找到它们?

2 个答案:

答案 0 :(得分:3)

http://en.wikipedia.org/wiki/Rpath_(linking)

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

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

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

答案 1 :(得分:2)

在链接阶段添加rpath,如此(在qt创建者中)示例:

  

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