im 为 Qt (5.2.0) 项目创建子目录模板,如本答案中所述
我可以在带有 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本机开发中是新手,无法自己解决这个问题。 感谢您的回答!
在 Mac OS X 上,部署过程与其他平台上略有不同。大多数情况下,您将创建必须包含所有必需库的应用程序捆绑包。Qt文档很好地描述了整个过程。以下是一些资源:
Qt for Mac OS X - 部署
查看 Mac 部署工具
我假设你有这样一个具有以下目录结构的subdirs项目:
subdirs
+ app
+ lib
也就是说,一个带有应用程序(称为app
)和库(称为lib
)的subdirs项目(此处创造性地称为subdirs
)。
现在,如果您的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
是构建和运行的详细信息,APPDIR
是app
项目的目录,并且APPTARGET
是app
项目的TARGET
价值。
为了在项目开发过程中摆脱OSX上的这个问题,您需要在Projects ->Build & Run -> RunEnvironment中将(OSX特定的)lib
DYLD_LIBRARY_PATH
设置为整个项目的运行设置,并添加具有值../LIBDIR/
的变量DYLD_LIBRARY_PATH
- 或者,如果您从命令行工作,export
该变量。
然后,若要部署应用,需要确保将动态库放置在应用捆绑包中或创建静态编译的捆绑包。有关 Digia: Mac OSX 部署的更多信息。