Qt6 qmake for iOS生成错误标准库路径导致编译失败
问题产生原因
这是Qt 6.3.1 iOS预编译安装包的已知打包缺陷:Qt官方在CI环境构建Qt 6.3.1 iOS版本时,没有将构建过程中硬编码的CI工作路径/Users/qt/work/qt/完全替换为用户本地安装的实际路径,部分静态插件、静态库的链接依赖项会残留CI路径,和本地Qt安装目录下的正确路径同时写入生成的Makefile、project.pbxproj文件中。链接阶段编译器找不到这些不存在的CI路径下的库文件,就会抛出对应的文件不存在错误。
该问题是Qt 6重构iOS静态构建依赖逻辑后引入的打包问题,和项目自身的pro配置无关,因此Qt 5.14.2版本不会出现该异常。
官方推荐永久修复方案
你当前使用的sed全局替换属于临时 workaround,不需要保留,可按以下优先级选择官方支持的修复方式:
- 优先选择升级Qt版本:该硬编码路径问题在Qt 6.4.0及之后的官方正式版本中已被完全修复,升级到Qt 6.5 LTS等稳定维护版本可以彻底解决该问题,无需额外修改构建逻辑。
- 如果必须锁定使用Qt 6.3.1版本,在执行qmake时向CONFIG参数追加
QT_NO_QT_BUILD_PATH_LINKING即可。这个开关是Qt 6.3系列版本专门为修复该路径残留问题预留的配置,开启后qmake生成构建文件时会自动过滤所有指向Qt CI构建目录的无效路径,仅保留本地安装路径下的合法库引用。修改后的qmake命令参考如下:
$qt_root/ios/bin/qmake \ $proFile \ -r -spec macx-ios-clang \ CONFIG+=release \ CONFIG+=iphoneos \ CONFIG+=development \ CONFIG+=QT_NO_QT_BUILD_PATH_LINKING \ "ENTITLEMENTS=$entitlementsFile" \ "INFO_PLIST=$plistFile" \ "BUNDLE_PREFIX=com.xxxxxx" \ "BUNDLE_IDENTIFIER=com.xxxxxx.xxxxxx"
注意:你原qmake命令中包裹参数的引号是中文全角引号,需要替换为英文半角双引号,否则可能出现参数解析异常。
- 如果不想修改qmake调用参数,也可以在项目pro文件的最顶部添加如下配置,效果和上述追加CONFIG参数完全一致:
CONFIG += QT_NO_QT_BUILD_PATH_LINKING
内容的提问来源于stack exchange,提问作者pier_nasos
相关产品推荐
相关产品推荐

