我正在为tvOS构建一个框架并使用混淆软件。所有源代码都用-emit-llvm
编译,混淆器处理LLVM IR代码,然后用clang++
编译成.o
,然后调用ld
来生成最终的二进制文件,ld
失败并显示此错误:
ld: Invalid record for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Program xcrun returned error code 1
可在使用 Xcode 11.2.1 和 11.3 的不同机器上重现。
如何排查此错误?我已将-v
添加到链接器标志中,但它没有向输出添加任何提示。
就我而言,当应用程序链接到外部库时,我收到此错误,但仅在生成产品存档时。 我的解决方案是禁用Target
的位码Build Settings
>Build Options
. 我以前禁用了它,但我的 Xcode 最近更新了,并且该设置可能已被覆盖。
再次回答我自己的问题,以防其他人遇到这个问题。
就我而言,问题是由我链接到的库之一引起的,该库是为 tvOS 的 arm64e 构建的。这是一个带有arm64,arm64e和x86_64切片的胖二进制。出于某种原因,ld
不喜欢它(即使我只为 arm64 构建框架(并抛出了这个错误。删除arm64e切片解决了这个问题。
另一个有趣的细节是调试版本与该库链接良好。