gpt4 book ai didi

ios - QT IOS 链接器错误入口点(_main)未定义

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:57 27 4
gpt4 key购买 nike

我目前正在尝试在 IOS 上编译一个基于 QT 的项目。我正在使用 cmake 创建和配置 .xcodeproject 和 xcode 以在设备上运行应用程序。

我成功地消除了所有先前的链接器错误,现在我正在处理入口点。

我的 main.cpp 看起来像那样

    int main(int argc, char **argv) {
QApplication app(argc, argv);
return app.exec();
}

这给我带来了以下错误:

Error: You are creating QApplication before calling UIApplicationMain. If you are writing a native iOS application, and only want to use Qt for parts of the application, a good place to create QApplication is from within 'applicationDidFinishLaunching' inside your UIApplication delegate.

我在这篇文章中发现您应该重命名 main,qt 将为您完成这项工作并启动应用程序生命周期

Run-time error for Qt application on ios built via CMake

Qt XCode iOS entry point

#if defined(Q_OS_IOS)
extern "C" int qtmn(int argc, char** argv) {
#else
int main(int argc, char **argv) {
#endif
QApplication app(argc, argv);
return app.exec();
}

但现在我正在处理这个错误

ld: entry point (_main) undefined. for architecture arm64

在第一篇文章中他们说我应该有一个你的/qt/root/path/mkspecs/macx-ios-clang/rename_main.sh脚本

我没有,在另一篇文章中答案是:

重命名 main -> qtmn(在 qt sourced 中),重建 QT,并从我的 main() 调用 qt_main_wrapper。

但我不知道我应该如何处理“重建并调用的 qt_main_wrapper”

最佳答案

修复是添加一个链接器标志

set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,-e,_qt_main_wrapper")

Qt 需要一个 UIApplication 来实例化,它是在 UIKit 中定义的应用程序。您可以在里面归档 qt_main_wrapper 的定义:qtbase/src/plugins/platforms/ios/qioseventdispatcher.mm

-e 选项为您的程序指定另一个入口点,这将创建此 UIApplication。

如果您遵循 QApplication 的构造函数,它将在 ios 插件中结束,如果未设置“UIApplication”单例,则会启动错误。

最后,如果您的应用程序正在使用一些 QML

set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-u _qt_registerPlatformPlugin")

您需要在 main.cpp 中加载所有不同的插件

Q_IMPORT_PLUGIN(QtQuick2Plugin)

并在您的 LD 标志中添加 .a 的路径,例如:

set (LINK_LIBRARIES ${LINK_LIBRARIES} "${USE_QT_DIR}/qml/QtQuick/Controls.2/libqtquickcontrols2plugin_debug.a")

对于 QtControls2 你还需要添加

set (LINK_LIBRARIES ${LINK_LIBRARIES} "${USE_QT_DIR}/lib/libQt5QuickControls2_debug.a")
set (LINK_LIBRARIES ${LINK_LIBRARIES} "${USE_QT_DIR}/lib/libQt5QuickTemplates2_debug.a")

有点麻烦,但是你可以在你的项目中运行位于Qt/5.7/ios/bin中的qmlimportscanner:

qmlimportscanner -rootPath path/to/app/qml/directory -importPath path/to/qt/qml/directory

它将为您提供一个 JSON,其中包含您的项目使用的所有插件。这是qmake调用的脚本,如果我有时间我会添加一个脚本来稍后添加不同的插件。

关于ios - QT IOS 链接器错误入口点(_main)未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com