通过CMake构建的ios上Qt应用程序的运行时错误

诺曼纽斯

嗨stackoverflowers :)

如果我构建一个Qt / qmake示例项目(在我的示例中为“模拟时钟”示例)并将其部署到运行iOS 7.1的设备,则一切都会顺利进行:该应用程序在该设备上可以完美执行。Chapeau-来自digia的人们做了艰巨的工作,将ios工具链集成到他们的Qt工作流程中。

但是,如果我将qmake项目转换为CMake项目,事情将变得不那么顺利。我已经附加了Qt-5.3.1版本的模拟时钟示例(请参见下文),其中添加了CMakeLists.txt和运行CMake的脚本以生成iOS的XCode项目。该项目可以编译甚至链接(我必须添加一些其他链接库,请参阅CMake源文件)。好极了。

但这是陷阱:应用程序在运行时崩溃,并显示以下错误消息:

错误:无法加载平台插件“ ios”

作为一个评论这个线程状态一个具有通过项目设置为“力载荷” libqios。这样做并没有太大改善,只是将错误消息更改为:

错误:您正在创建QApplication,然后再调用UIApplicationMain。如果您正在编写本机iOS应用程序,并且只想对部分应用程序使用Qt,则创建QApplication的好地方是在UIApplication委托中的“ applicationDidFinishLaunching”中。

我有两个问题:

  • 有谁知道运行时错误是什么问题?我知道qmake(和相应的ios mkspecs)做了很多魔术。但是如何将其转换为CMake?
  • 为什么我必须手动将几个库(harfbuzzng,qios,libpng和几个iOS框架)链接到我的目标?find_package(Qt5 ...)是否应该为我完成这项工作?

是包含我的Qt-CMake项目的zip文件的链接。我正在使用的Qt版本是iOS的Qt-5.3.1。

编辑:我发现,如果将其从Qt示例文件夹结构中撕裂,则qmake示例将无法正常工作。直接查看Qt示例:path / to / Qt / examples / widgets / widgets / analogclock。

诺曼纽斯

经过几个小时的研究,我找到了一种方法来为我的iOS Qt应用程序创建CMake项目。我通过Google以及检查qmake生成的输出得到的关键提示。我找到了可以真正发挥全部魔力的脚本,并将其部分内容应用到了我的CMake源码中。

这是对我有用的食谱。为了完整起见,我还添加了我发布上述问题时已经知道的步骤:

  • 将CMake引入ios工具链。请参阅我的示例项目的cmake / toolchain / ios.toolchain.cmake。它设置了几个CMake属性,并寻找必要的工具和框架。(我不再记得该文件来自何处,但是如果您使用Google,也会在其他几个项目中使用它。)您必须将此安装文件作为参数传递给CMake(请参见下文)。

  • 设置可执行文件的几个目标属性,以将其变成(iOS)应用程序捆绑包。应该清楚。请注意,有一个模板Info.plist.in将由CMake完成。

  • 修复1:在CMake中将缺少的库和框架手动链接到应用程序。由于某些原因,find_package(Qt5 ...)不会返回完整的依赖项列表。不过,我很可能在这里错过了一些东西。

  • 修复2:请确保强制加载libqios,以避免出现有关缺少iOS插件的错误消息。在CMake中:

    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -force_load ${YOUR_QT_ROOT_PATH}/plugins/platforms/libqios.a" )

  • 修复3:删除Info.plist.in中的情节提要键。我不详细了解此步骤。该方法的灵感来自于stackoverflow上这篇文章。

    <key>UIMainStoryboardFile</key> <string>main</string>

  • 修复4:现在最重要的是:对于iOS,您必须使用对应的“ C”格式版本将main()函数重命名。显然,Qt带有它自己的main入口点,并重命名了您编写的那个qtmn()此qmake魔术是通过以下脚本执行的:your / qt / root / path / mkspecs / macx-ios-clang / rename_main.sh。我不了解这背后的完整机制。就我而言,我可以重命名main的函数签名:

    // Replace... int main(int argc, char *argv[])

    // ... with this line: extern "C" int qtmn(int argc, char *argv[])

又是我在问题中所指的同一个项目,这次是从上方应用了修复程序。要构建此项目,只需调用build_ios.sh,然后打开在build文件夹中创建的xcodeproj文件。

注意:可行的假设是可以使用正确版本的XCode(在我的情况下为5.1.1),并且您拥有有效的签名身份(在CMakeLists.txt中进行更改!)。此外,在我的示例项目(请参阅下文)中,我假定可以使用针对iOS构建的OpenCV。我需要它来解决链接器问题:OpenCV附带的libpng中缺少一些对象。

我希望这可以帮到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Qt 5.1应用程序在QtCreator以外的Windows 8上无法运行,运行时错误

来自分类Dev

在 Unity 中构建并通过 XCode 运行时 iPad 上的空白应用程序图标

来自分类Dev

构建Android应用程序时遇到运行时错误

来自分类Dev

在android 4.4.2版上运行时,应用程序中断,抛出错误:[ng:areq]

来自分类Dev

在Wildfly上运行时的Spring Boot应用程序问题(bean创建错误)

来自分类Dev

如何处理 Express 应用程序上的运行时错误?

来自分类Dev

在模拟器上执行应用程序时出现 Android 运行时错误

来自分类Dev

尝试在IO7.1(photo.framework)上运行时iOS应用程序崩溃

来自分类Dev

在iOS 7.1上运行时,应用程序无法全屏启动吗?

来自分类Dev

Blackberry-Android应用程序运行时错误

来自分类Dev

Linux 上 .NET 核心应用程序的运行时

来自分类Dev

运行时应用程序

来自分类Dev

blazor wasm应用程序在运行时的程序集构建版本

来自分类Dev

当我们的应用程序快速运行时,检测显示在 iOS 设备屏幕上的推送通知

来自分类Dev

指定使用“ dist”构建的运行时播放应用程序配置

来自分类Dev

如何构建Java桌面应用程序运行时模块化?

来自分类Dev

使用sbt构建的应用程序在运行时发生NoClassDefFoundError

来自分类Dev

指定使用“ dist”构建的运行时播放应用程序配置

来自分类Dev

如何构建Java桌面应用程序运行时模块化?

来自分类Dev

VBA错误:“运行时错误1004:应用程序定义或对象定义的错误”

来自分类Dev

运行时错误'1004'应用程序定义的错误或对象定义的错误'

来自分类Dev

运行时错误'1004':应用程序定义的错误或对象定义的错误VBA

来自分类Dev

范围的VBA运行时错误1004“应用程序定义的错误或对象定义的错误”

来自分类Dev

在Fire Monkey(FMX)中检索OSX的Delphi运行时应用程序版本和应用程序构建信息

来自分类Dev

通过php exec运行时,守护程序服务应用程序无法绑定端口

来自分类Dev

运行应用程序时出现运行时错误,原因是Qlable

来自分类Dev

运行Spring Session + Spring Boot应用程序时发生运行时错误

来自分类Dev

Android:调试正在运行的应用程序的正确方法(运行时错误/日志)

来自分类Dev

运行Android应用程序时出现运行时错误

Related 相关文章

  1. 1

    Qt 5.1应用程序在QtCreator以外的Windows 8上无法运行,运行时错误

  2. 2

    在 Unity 中构建并通过 XCode 运行时 iPad 上的空白应用程序图标

  3. 3

    构建Android应用程序时遇到运行时错误

  4. 4

    在android 4.4.2版上运行时,应用程序中断,抛出错误:[ng:areq]

  5. 5

    在Wildfly上运行时的Spring Boot应用程序问题(bean创建错误)

  6. 6

    如何处理 Express 应用程序上的运行时错误?

  7. 7

    在模拟器上执行应用程序时出现 Android 运行时错误

  8. 8

    尝试在IO7.1(photo.framework)上运行时iOS应用程序崩溃

  9. 9

    在iOS 7.1上运行时,应用程序无法全屏启动吗?

  10. 10

    Blackberry-Android应用程序运行时错误

  11. 11

    Linux 上 .NET 核心应用程序的运行时

  12. 12

    运行时应用程序

  13. 13

    blazor wasm应用程序在运行时的程序集构建版本

  14. 14

    当我们的应用程序快速运行时,检测显示在 iOS 设备屏幕上的推送通知

  15. 15

    指定使用“ dist”构建的运行时播放应用程序配置

  16. 16

    如何构建Java桌面应用程序运行时模块化?

  17. 17

    使用sbt构建的应用程序在运行时发生NoClassDefFoundError

  18. 18

    指定使用“ dist”构建的运行时播放应用程序配置

  19. 19

    如何构建Java桌面应用程序运行时模块化?

  20. 20

    VBA错误:“运行时错误1004:应用程序定义或对象定义的错误”

  21. 21

    运行时错误'1004'应用程序定义的错误或对象定义的错误'

  22. 22

    运行时错误'1004':应用程序定义的错误或对象定义的错误VBA

  23. 23

    范围的VBA运行时错误1004“应用程序定义的错误或对象定义的错误”

  24. 24

    在Fire Monkey(FMX)中检索OSX的Delphi运行时应用程序版本和应用程序构建信息

  25. 25

    通过php exec运行时,守护程序服务应用程序无法绑定端口

  26. 26

    运行应用程序时出现运行时错误,原因是Qlable

  27. 27

    运行Spring Session + Spring Boot应用程序时发生运行时错误

  28. 28

    Android:调试正在运行的应用程序的正确方法(运行时错误/日志)

  29. 29

    运行Android应用程序时出现运行时错误

热门标签

归档