Kra*_*rab 3 c++ macos qt qmake
我有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指令解析).
您需要使用正确的安装名称构建框架.例如:
QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/
Run Code Online (Sandbox Code Playgroud)
然后在你的申请中,
osx:LIBS += -F$$OUT_PWD/Frameworks -framework library1
QMAKE_RPATHDIR += /usr/lib
Run Code Online (Sandbox Code Playgroud)
如果生成的"library1"框架放在/ usr/lib中,那么应用程序应该正常加载.但是,在几乎所有情况下,您都希望将框架放在应用程序包中,如下所示:
myapp.app/Contents/Frameworks/library1.framework
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您在应用程序中设置rpath的方式略有不同,如下所示:
QMAKE_RPATHDIR += @executable_path/../Frameworks
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3436 次 |
| 最近记录: |