jpo*_*o38 3 c++ qt dylib qt-creator ios
我在 iOS 上部署动态共享库时遇到了困难。
\n\n为了隔离和暴露问题,我有一个非常简单的“HelloWorld”项目:一个库导出类,其中包含返回“Hello World”的函数,以及一个使用该类并显示消息的程序。
\n\n我正在使用 QtCreator 和 Qt 5.5。
\n\n我能够生成文件.dylib
并链接我的程序。但是,当我将其部署到 iPhone 上时,出现错误:
D\xc3\xa9marrage des processus distants.\ndyld: Library not loaded: libMyLib.1.dylib\n Referenced from: /private/var/mobile/Containers/Bundle/Application/D6942CCE-828D-4C10-86DA-F7DA7ADF7449/MyApp.app/MyApp\n Reason: image not found \n
Run Code Online (Sandbox Code Playgroud)\n\n在 Android 上,我遇到了同样的问题,可以通过使用ANDROID_EXTRA_LIBS
. 但我找不到 iOS 的等效项。
这是我的 .pro 文件。完整的项目可以在这里下载。我将此作为一个错误向 Qt报告,但如果有人能提出一种解决方法,这将会有所帮助!
\n\nMyLib.pro:
\n\nQT -= core gui\n\nTARGET = MyLib\nTEMPLATE = lib\n\nDEFINES += MYLIB_LIBRARY\n\nSOURCES += mylib.cpp\n\nCONFIG += shared\n\nHEADERS += mylib.h\\\n mylib_global.h\n
Run Code Online (Sandbox Code Playgroud)\n\n我的应用程序.pro:
\n\nQT += core gui\n\ngreaterThan(QT_MAJOR_VERSION, 4): QT += widgets\n\nTARGET = MyApp\nTEMPLATE = app\n\n\nSOURCES += main.cpp\\\n dialog.cpp\n\nHEADERS += dialog.h\n\nINCLUDEPATH += ../MyLib\n\nLIBS += ../MyLib/libMyLib.dylib\n
Run Code Online (Sandbox Code Playgroud)\n\n我希望解决方案全部嵌入到 QtCreator 中。这里唯一需要更改的是两个 .pro 文件之一。可能通过构建后调用 MACOS 命令...?或者只是 MyApp.pro 中的构建后指令,在部署应用程序之前将 dylib 复制到正确的位置(.app 目标文件夹)?我真的很惊讶 QtCreator 没有默默地涵盖这一点......
\n\n注意:本题建议设置DYLD_LIBRARY_PATH
。但我不知道如何在 MyApp.pro 文件中执行此操作,也不知道它将如何帮助 iOS 部署(因为 DYLD_LIBRARY_PATH 可以将 MAC 路径设置为库,而不是将 iPhone 路径设置为库......)
1)在您的库项目中,确保您的dylibs具有安装名称@rpath/mylib.dylib
等。例如,通过添加QMAKE_SONAME_PREFIX = @rpath
到您的库 .pro 文件。
(您可以通过查看 的第一行进行检查otool -L /path/to/libmylib.dylib
。如果库是预构建的 3rdparty 库,请使用 进行更改install_name_tool -id @rpath/libmylib.dylib
)
2)将以下内容添加到应用程序.pro文件中
# link to the lib:
LIBS += -L../mylib -lmylib
# make the app find the libs:
QMAKE_RPATHDIR = @executable_path/Frameworks
# deploy the libs:
mylib.files = $$OUT_PWD/mylib/libmylib.1.dylib
mylib.path = Frameworks
QMAKE_BUNDLE_DATA += mylib
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3064 次 |
最近记录: |