上下文
我在Qt中使用Qt Creator在OS X中开发了一个应用程序。现在我的文件组织很乱(每个文件都是同一个文件夹)所以我决定转移到另一个项目结构也允许我也进行单元测试。
我尝试了什么
关注this blog entry我尝试创建相同的项目(仅用于测试目的)。
问题
所有内容都会编译,但在执行时会出现错误Library not loaded
。
我想也许我做错了所以我克隆了the example repo并用一个有效的例子再次尝试。但它给了我同样的错误:
dyld: Library not loaded: libmyapp.1.dylib
Referenced from: /Users/(my build folder)/app/app
Reason: image not found
这个例子应该是正确的。我做的唯一改变是删除测试子目录,因为我还没有安装UnitTest ++所以我的.pro文件是这样的:
TEMPLATE = subdirs
CONFIG+=ordered
SUBDIRS = \
src \
app
app.depends = src
OTHER_FILES += \
defaults.pri
我做错了吗?有没有忘记的步骤?
修改1:
手动创建Frameworks
文件夹并在捆绑包中添加libmyapp.1.dylib
使应用程序正常工作。但我认为这一步应该自动完成
编辑2:
我已按照建议尝试运行macdeployqt
。似乎应用程序试图从系统路径而不是提供的库中获取库:
macdeployqt app.app
ERROR: no file at "/usr/lib/libmyapp.1.dylib"
答案 0 :(得分:0)
我已经完成以下操作以获得可执行文件中的lib的正确依赖性...
应用程序专业文件中的此代码设置依赖项,并将文件直接放入bundle Contents/Framework
文件夹中(我选择使可执行文件完成所有工作)
# to get the dependencies
INCLUDEPATH += ../libmyapp
macx {
LIBS += ../libmyapp/libmyapp.1.dylib
PRE_TARGETDEPS += ../libmyapp/libmyapp.1.dylib
MY.path = Contents/Frameworks
MY.files = ../libmyapp/libmyapp.1.dylib
QMAKE_BUNDLE_DATA += MY
}
或者你可以让你的lib成为一个框架..这篇文章中的2个选项: How to create a Bundle Library (mh_bundle) with qmake on Mac OS X?
阅读deploying an app on OS X的过程会很好......工具trojanfoe考虑用于部署qt应用程序,称为macdeployqt
答案 1 :(得分:0)
使用依赖于Mac OS X的C ++程序包可能会非常痛苦。在您真正需要将应用程序作为捆绑包发布之前的解决方法是告诉Qt根本不要创建捆绑包。将以下内容添加到app.pro文件中:
{{1}}
然后你可以自己将dylib添加到输出目录中,它应该可以正常工作。
另一种选择是在Qt Creator中为项目的“运行”设置中设置/添加环境变量LD_LIBRARY_PATH,以指向已编译的dylib所在的路径。
我不确定上述情况是否有效,但这些是我早期对类似问题的最佳猜测。另外,请确保您使用的是最新版本的Qt和Qt Creator。