我有 mac os x。我有应用程序,它需要使用共享库(Mac 上的框架),它是作为单独的项目开发的,但同时也在 Qt 5 中开发。

App.pro

.
.
else:mac: LIBS += -F$$OUT_PWD/Frameworks -framework library1
.
.

QMAKE_RPATHDIR += /usr/lib

首先,我告诉 qmake,library1 将驻留在 Frameworks 目录中的包中(这没问题,链接成功)

其次,QMAKE_RPATHDIR 应该告诉 gcc 编译器,当应用程序的库被定位时,它也应该查看 QMAKE_RPATHDIR 中的那些路径。我指定了 /usr/lib ,只是为了检查它是否可以工作,但是:
otool -l app

没有显示任何 LC_RPATH (我希望 /usr/lib 会有一个记录),就像这里的 Print rpath of executable on OSX

我真的需要设置我的开发环境(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

这是显而易见的,因为 .pro 文件中的设置仅用于链接,并不解决这些库的动态加载(应该由 QMAKE_RPATHDIR 指令解决)。

最佳答案

您需要使用正确的安装名称构建您的框架。例如:

QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/

然后在您的应用程序中,
osx:LIBS += -F$$OUT_PWD/Frameworks -framework library1
QMAKE_RPATHDIR += /usr/lib

如果您生成的“library1”框架放在/usr/lib 中,那么您的应用程序应该可以正常加载。但是,在几乎所有情况下,您都希望将框架放置在应用程序包中,如下所示:
myapp.app/Contents/Frameworks/library1.framework

在这种情况下,您可以稍微不同地在应用程序中设置 rpath,如下所示:
QMAKE_RPATHDIR += @executable_path/../Frameworks

关于c++ - qmake - QMAKE_RPATHDIR 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24221626/

10-16 05:06