新建LibGDX iOS项目执行launchIOSDevice时出现链接错误
LibGDX iOS项目编译链接错误排查
问题描述
我尝试将旧LibGDX游戏更新为使用最新版本的各类第三方库,但无法在iOS设备上运行。于是回到基础操作,创建了一个全新的LibGDX项目进行测试,仅在build.gradle文件中添加了签名身份(Sign Identity)和配置描述文件(Provisioning Profile),其余未做任何修改,结果仍出现相同错误。
请问:
- 其他人的新建iOS项目能正常运行吗?
- 该错误的原因是什么?
错误日志
17:55:34: 正在执行 'launchIOSDevice'... 启动Gradle守护进程... Gradle守护进程已在569毫秒内启动 > Task :core:compileJava 已是最新 > Task :ios:compileJava 已是最新 > Task :ios:processResources 无资源 > Task :ios:classes 已是最新 > Task :ios:jar 已是最新 > Task :ios:assemble 已是最新 > Task :core:processResources 无资源 > Task :core:classes 已是最新 > Task :core:jar 已是最新 > Task :ios:compileTestJava 无资源 > Task :ios:processTestResources 无资源 > Task :ios:testClasses 已是最新 > Task :ios:test 无资源 > Task :ios:check 已是最新 > Task :ios:build 已是最新 > Task :ios:launchIOSDevice ld: 警告:忽略重复库: '-lz' 0 0x1025db648 __assert_rtn + 72 1 0x1025960f0 ___Z13dispatchApplyIRKmZ15dispatchForEachIKN6mach_o13CompactUnwind11Diff24FixupEZNK2ld16LayoutExecutable18writeCompactUnwindENSt3__14spanIhLm18446744073709551615EEEyRKNS7_13SectionLayoutEE4$_26EvNSA_IT_Lm18446744073709551615EEEmT0_EUlmE_EvOSG_SI__block_invoke + 0 2 0x18c5f5950 _dispatch_client_callout2 + 20 3 0x18c60a1a4 _dispatch_apply_invoke_and_wait + 176 4 0x18c609464 _dispatch_apply_with_attr_f + 1176 5 0x18c609650 dispatch_apply + 96 6 0x102596398 ld::LayoutExecutable::writeContentWithoutLinkEdit(std::__1::span<unsigned char, 18446744073709551615ul>, unsigned long long) + 672 7 0x10259c020 ld::LayoutExecutable::writeToFile(char const*) + 15248 8 0x10254e2e8 main + 9424 ld: 断言失败: (false && "紧凑 unwind 压缩函数偏移量无法放入24位空间"), 函数operator(), 文件Layout.cpp, 第5758行。 clang: 错误:链接器命令失败,退出代码为1(使用-v查看调用详情) > Task :ios:launchIOSDevice 失败 5个可执行任务: 1个已执行,4个已是最新 FAILURE: 构建因异常失败。 * 出错原因: 任务 ':ios:launchIOSDevice' 执行失败。 > 无法启动iOS设备 为应用构建RoboVM可执行文件时出错 命令 '[/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++, -o, /Users/williamcalderwood/Downloads/test/ios/build/robovm.tmp/IOSLauncher, -Wl,-filelist,/Users/williamcalderwood/Downloads/test/ios/build/robovm.tmp/objects0, -L, /Users/williamcalderwood/.m2/repository/com/mobidevelop/robovm/robovm-dist/2.3.20/unpacked/robovm-2.3.20/lib/vm/ios/arm64, -ObjC, -exported_symbols_list, /Users/williamcalderwood/Downloads/test/ios/build/robovm.tmp/exported_symbols, -Wl,-no_implicit_dylibs, -Wl,-dead_strip, -F/Users/williamcalderwood/.robovm/cache/ios/arm64/release/Users/williamcalderwood/.gradle/caches/modules-2/files-2.1/com.badlogicgames.gdx/gdx-platform/1.12.0/e7eb1777f7c465f6ef8cb1dad7dfc405184f17aa/gdx-platform-1.12.0-natives-ios.jar.extracted/META-INF/robovm/ios/libs, -F/Users/williamcalderwood/.robovm/cache/ios/arm64/release/Users/williamcalderwood/.gradle/caches/modules-2/files-2.1/com.badlogicgames.gdx/gdx-platform/1.12.0/e7eb1777f7c465f6ef8cb1dad7dfc405184f17aa/gdx-platform-1.12.0-natives-ios.jar.extracted/META-INF/robovm/ios/libs/gdx.xcframework/ios-arm64, -F/Users/williamcalderwood/.robovm/cache/ios/arm64/release/Users/williamcalderwood/.gradle/caches/modules-2/files-2.1/com.badlogicgames.gdx/gdx-platform/1.12.0/e7eb1777f7c465f6ef8cb1dad7dfc405184f17aa/gdx-platform-1.12.0-natives-ios.jar.extracted/META-INF/robovm/ios/libs/ObjectAL.xcframework/ios-arm64, -L/usr/lib/swift, -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos, -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.5/iphoneos, -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos, -fPIC, --target=arm64-apple-ios11.0, -isysroot, /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.0.sdk, -lrobovm-bc, -force_load, /Users/williamcalderwood/.m2/repository/com/mobidevelop/robovm/robovm-dist/2.3.20/unpacked/robovm-2.3.20/lib/vm/ios/arm64/librobovm-rt.a, -lrobovm-debug, -lrobovm-core, -lgc, -lpthread, -ldl, -lm, -lz, -liconv, -lsqlite3, -framework, Foundation, -framework, OpenGLES, -framework, gdx, -framework, ObjectAL, -framework, UIKit, -framework, QuartzCore, -framework, CoreGraphics, -framework, OpenAL, -framework, AudioToolbox, -framework, AVFoundation, -framework, GameController, -lz, -framework, MobileCoreServices, -Xlinker, -rpath, -Xlinker, /usr/lib/swift, -Xlinker, -rpath, -Xlinker, @executable_path/Frameworks, -Xlinker, -rpath, -Xlinker, @loader_path/Frameworks]' 执行失败(退出值: 1) * 尝试方案: > 使用 --stacktrace 选项获取堆栈跟踪。 > 使用 --info 或 --debug 选项获取更多日志输出。 > 使用 --scan 选项获取完整分析信息。 * 获取更多帮助请访问 https://help.gradle.org 构建失败,耗时58秒 17:56:33: 'launchIOSDevice' 执行完成。
问题解答
错误原因
这个错误的核心是Xcode 17与旧版RoboVM的兼容性问题:
- 日志中关键错误提示
紧凑 unwind 压缩函数偏移量无法放入24位空间,说明Xcode 17对ARM64架构的紧凑 unwind(用于异常处理的调试信息)格式做了调整,而你使用的RoboVM 2.3.20没有适配这个新格式,导致链接器生成的信息不符合要求,触发断言失败。 - 日志里的
忽略重复库: '-lz'是次要警告,是链接时重复引入zlib库导致的,和核心错误无关。
新建项目能否正常运行
如果其他开发者使用适配Xcode 17的RoboVM版本(比如RoboVM 2.3.21及以上,或最新的开发版),新建的LibGDX iOS项目可以正常运行。旧版RoboVM在Xcode 17环境下都会触发这个错误。
解决办法
- 升级RoboVM版本:将项目中的RoboVM依赖升级到2.3.21或更高版本,该版本已修复Xcode 17的兼容性问题。
- 降级Xcode:如果暂时无法升级RoboVM,可以将Xcode降级到16或更低版本,避开兼容性冲突。
内容的提问来源于stack exchange,提问作者Will Calderwood
相关产品推荐
相关产品推荐

