【问题标题】:qmake subdir template on mac os Xmac os X 上的 qmake subdir 模板
【发布时间】:2014-01-22 07:05:46
【问题描述】:

我为 Qt (5.2.0) 项目创建子目录模板,如 answer 中所述

我可以使用 minGW 和 GCC 在 win 和 linux 平台上构建它,但在 mac os 上我会遇到下一个错误

dyld: Library not loaded: libfile-helpers.1.dylib
Referenced from: /Users/myusername/Programming/Qt/build-ProjectName-qt-Desktop_Qt_5_2_0_clang_64bit-Debug/build/project
Reason: image not found

程序意外结束。

主可执行文件上的otool -L 给出下一个输出

libfile-helpers.1.dylib (compatibility version 1.0.0, current version 1.0.0)
libgui.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/Users/myusername/Qt/5.2.0/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.2.0, current version 5.2.0)
/Users/myusername/Qt/5.2.0/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.2.0, current version 5.2.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

但文件 *.dylib 放在子目录中,在当前设置中找不到

如何设置项目以在构建后正确运行而无需手动文件操作 我在 build.pro 中所做的一项更改(请参阅开头的答案)是添加下一个文本

macx {
   CONFIG -= app_bundle
} 

(uname -a)

Darwin MacBook.local 13.0.2 Darwin Kernel Version 13.0.2: Sun Sep 29 19:38:57 PDT 2013; root:xnu-2422.75.4~1/RELEASE_X86_64 x86_64

使用 qmake (-v)

QMake version 3.0
Using Qt version 5.2.0 in /Users/myusername/Qt/5.2.0/clang_64/lib

和铿锵声(-v)

Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.2
Thread model: posix

我在 osX 原生开发中很菜鸟,自己无法解决这个问题。 感谢您的回答!

【问题讨论】:

    标签: c++ macos qt qt5 qmake


    【解决方案1】:

    在 Mac OS X 上的部署过程与其他平台上的有些不同。大多数情况下,您将创建必须包含所有必需库的应用程序包。 Qt 文档很好地描述了整个过程。以下是一些资源:

    Qt for Mac OS X - Deployment

    看看The Mac Deployment Tool

    【讨论】:

    • 但是如果我将项目作为捆绑包运行,我仍然可以调试它吗?
    • 如果你不把它从调试符号中去掉
    • 问题仍然存在。内部包仅显示可执行文件,其中包含指向项目库的链接,就像它们与他在同一个文件夹中一样
    • 你做错了什么。您是否遵循了部署过程中的所有步骤?您是否更改了库 install_name?它应该在 bundle.app/Contents/Frameworks 目录中,没有链接
    【解决方案2】:

    我假设你有这样一个具有这种目录结构的子目录项目:

    subdirs
      + app
      + lib
    

    也就是说,一个子目录项目(这里创造性地称为subdirs)带有一个应用程序(称为app)和一个lib(称为lib)项目。

    现在,如果您的 app 在 OSX 上的 subdirs 项目中使用动态链接/共享的 lib 项目,您将收到以下错误:

    dyld: Library not loaded: libLIBTARGET.1.dylib
      Referenced from: /path/to/qt/build/dir/build-PROJECT-DETAILS/APPDIR/APPTARGET
      Reason: image not found
    The program has unexpectedly finished.
    

    在哪里

    • LIBTARGET 是您的 lib 项目的 TARGET 值,
    • PROJECT 是您的 subdirs 项目的名称,
    • DETAILS 是您的构建和运行详细信息,
    • APPDIRapp项目的目录,
    • APPTARGET 是您的 app 项目的 TARGET 值。

    为了在项目开发过程中摆脱OSX上的这个问题,你需要在Projects -> 中将(OSX-specific)DYLD_LIBRARY_PATHlib目录设置为整个项目的运行设置构建和运行 -> 运行环境 并添加变量 DYLD_LIBRARY_PATH 和值 ../LIBDIR/ - 或者,如果您在命令行中工作,则添加 export 该变量。

    然后,为了部署应用程序,您需要确保将动态库放置在您的应用程序包中或创建一个静态编译的包。更多信息请参见Digia: Mac OSX Deployment

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-21
      • 2011-08-24
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多