dyld:未加载库:myOwnLibrary

时间:2015-09-02 11:43:45

标签: c++ macos qt qt-creator

上下文

我在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"

2 个答案:

答案 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。