You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QT 6.4.2 iOS应用CMake编译时出现_main入口点未定义链接错误

Qt6.4.2 + CMake 构建iOS应用时的_main链接错误问题

错误信息

Undefined symbols for architecture arm64:
  "_main", referenced from:
      user_main_trampoline() in libqios_debug.a(qioseventdispatcher.mm.o)
     (maybe you meant: _jinit_d_main_controller, _jinit_c_main_controller , _qt_main_wrapper )
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

已安装Qt库列表

QT 6.2.4已安装的库和模块列表

主入口函数代码

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

相关CMake脚本片段

set(TARGET_NAME Focus)
set(CMAKE_SUPPRESS_REGENERATION true)
include(../cute.cmake)
include(../files.cmake)
 
cute_add_executable(${TARGET_NAME})
target_sources(${TARGET_NAME} 
    PRIVATE
    ${FOCUS_HEADER}
    ${OBJECTIVE_HEADER}
    ${COMMON_HEADER}
    ${FOCUS_SOURCE}
    ${OBJECTIVE_SOURCE}
    ${COMMON_SOURCE}
    ${QUICK_IOS_SOURCE}
    ${FOCUS_QML_SOURCE}
    ${QUICK_IOS_QML_SOURCE}
    ${QRC_FILES}
    ${QT_QML_PLUGIN_CPP}
)
 
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core OpenGL Concurrent Widgets Multimedia Network Sql Qml Quick QuickWidgets Svg WebView QuickControls2 Core5Compat REQUIRED)
 
# set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,-e,_qt_main_wrapper")
# set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-u _qt_registerPlatformPlugin")
 
target_link_libraries(${TARGET_NAME} 
    PRIVATE
    #MySharedLibrary
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Concurrent
    Qt${QT_VERSION_MAJOR}::Network
    Qt${QT_VERSION_MAJOR}::Qml
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::OpenGL
    Qt${QT_VERSION_MAJOR}::Multimedia
    Qt${QT_VERSION_MAJOR}::Network
    Qt${QT_VERSION_MAJOR}::Sql
    Qt${QT_VERSION_MAJOR}::Qml
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::QuickControls2
    Qt${QT_VERSION_MAJOR}::QuickWidgets
    Qt${QT_VERSION_MAJOR}::Svg
    Qt${QT_VERSION_MAJOR}::WebView
    Qt${QT_VERSION_MAJOR}::Core5Compat
)
 
if (${QT_VERSION_MAJOR} EQUAL 6)
    qt6_import_qml_plugins(${TARGET_NAME})
endif ()
 
file(GLOB LOCAL_LIB_FILES "${CMAKE_SOURCE_DIR}/lib/ios/*.a")
message("CMAKE_SOURCE_DIR  : " ${CMAKE_SOURCE_DIR})
 
target_link_libraries(${TARGET_NAME} 
    PRIVATE
    ${LOCAL_LIB_FILES}
)

补充信息

  • 已查阅Qt社区及Stack Overflow相关帖子,但未能解决问题
  • 链接器命令、完整CMake脚本可参考原始提问附件
  • 使用了cuteserver的hello-world作为iOS toolchain和Qt配置

解决思路

  • 确认main函数编译状态:检查main函数所在源文件是否被正确加入target_sources,排除编译条件导致的遗漏
  • 指定Qt iOS入口包装:取消CMake中注释的set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,-e,_qt_main_wrapper"),iOS平台下Qt依赖_qt_main_wrapper作为入口跳板
  • 检查Qt平台模块:确保已正确链接Qt iOS平台相关组件,缺失平台模块会导致入口点查找失败
  • 排查本地静态库:暂时移除lib/ios/*.a下的静态库,验证是否存在库冲突,再逐步添加排查
  • 对齐官方模板:对比Qt官方iOS CMake项目模板,检查cute_add_executable是否正确处理iOS应用的构建要求,比如.app包结构、编译选项等

内容的提问来源于stack exchange,提问作者inkfil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:05:23