我读了一些不鼓励使用DYLD_LIBRARY_PATH的文章,因为动态库的路径应该使用-install_name,@ aptath和@loader_path来修复.
在制作在Linux和Mac OS X上运行的程序方面,Mac OS X的DYLD_LIBRARY_PATH正好与Linux的LD_LIBRARY_PATH完全相同.而且,我们可以(几乎)共享同一个没有-install_name和@rpath的make文件.
我正在使用最新版本的Xcode 4开发Cocoa应用程序,我想将动态库链接到我的项目(dylibs).
我读的地方,在我的项目库添加是不够的,因为我有运行install_name_tool,并otool让我的项目中使用我的项目被捆绑的库.
我已经阅读了手册页install_name_tool,但我不明白为什么我必须这样做.
图书馆如何运作?特别感兴趣的是应用程序和库具有指向我机器中特定位置的路径的部分,例如/usr/local/lib/mylibrary.dylib运行时otool -L
我有mac os x.我有应用程序,它需要使用共享库(mac上的框架),它是作为单独的项目开发的,但同时也在Qt 5中.
App.pro
.
.
else:mac: LIBS += -F$$OUT_PWD/Frameworks -framework library1
.
.
QMAKE_RPATHDIR += /usr/lib
Run Code Online (Sandbox Code Playgroud)
首先,我告诉qmake,library1将驻留在Frameworks目录中的捆绑包中(这没有问题,链接成功完成)
其次,QMAKE_RPATHDIR应该告诉gcc编译器,当找到应用程序的库时,它也应该查看这些路径QMAKE_RPATHDIR.我指定/usr/lib,只是为了检查它是否可行,但是:
otool -l app
Run Code Online (Sandbox Code Playgroud)
没有显示任何LC_RPATH(我希望将有一个记录/usr/lib),如此在OSX上打印可执行文件的rpath
我真的需要设置我的开发环境(Qt 5,Mac OS X,一个基本应用程序,一个核心库(这也将作为插件的SDK)和其他插件(共享库).
错误仍然是:
dyld: Library not loaded: library1.framework/Versions/1/library1
Referenced from: /Users/Krab/projects/qtProjects/build-rootProject-Desktop_Qt_5_3_0_clang_64bit-Release/app/app.app/Contents/MacOS/app
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
这是显而易见的,因为.pro文件中的设置仅用于链接,并不解决这些库的动态加载(应由该QMAKE_RPATHDIR指令解析).