xcodebuild链接器断言失败

时间:2016-03-31 23:00:59

标签: ios xcode ld bitcode

我在使用xcodebuild在命令行中构建iOS动态框架时遇到此ld断言错误。

0  0x10163b342  __assert_rtn + 144
1  0x101678a3a  archive::File<arm64>::makeObjectFileForMember(archive::File<arm64>::Entry const*) const + 1138
2  0x1016783e8  archive::File<arm64>::justInTimeforEachAtom(char const*, ld::File::AtomHandler&) const + 122
3  0x10168ea75  ld::tool::InputFiles::searchLibraries(char const*, bool, bool, bool, ld::File::AtomHandler&) const + 265
4  0x101697db8  ld::tool::Resolver::resolveUndefines() + 160
5  0x10169a117  ld::tool::Resolver::resolve() + 79
6  0x10163c060  main + 812
7  0x7fff9dd4c5ad  start + 1
A linker snapshot was created at:
/tmp/MyKit-2016-02-31-154836.ld-snapshot
ld: Assertion failed: (memberIndex != 0), function makeObjectFileForMember, file /Library/Caches/com.apple.xbs/Sources/ld64/ld64-253.9/src/ld/parsers/archive_file.cpp, line 355.
clang: error: linker command failed with exit code 1 (use -v to see invocation)

根据archive_file.cpp源代码(http://www.opensource.apple.com/source/ld64/ld64-253.3/src/ld/parsers/archive_file.cpp),当ld加载库时,似乎存在某种符号损坏。但除此之外,我不知道如何解决这个问题。

只有当我尝试通过添加“-fembed-bitcode”编译器标志来启用bitcode来构建我的框架时,才会出现此问题。

另外,在我的ld命令中,我试图链接一些静态库,其中一个是&gt; 4.25 GB(内置bitcode),此大小超过无符号32位整数的最大值(~3.99 GB)。我以前遇到过与libtool有关的一些问题,因为无法处理大型二进制库,所以这是我的怀疑之一。

我想知道是否有人遇到类似的问题或弄清楚如何修复它?感谢

一些相关问题

Weird xCode linker error I've never seen before saying "Assertion failed"

https://github.com/SciRuby/nmatrix/issues/69

http://lists.llvm.org/pipermail/llvm-dev/2013-October/066722.html

https://github.com/TrinityCore/TrinityCore/issues/14689

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57438

2 个答案:

答案 0 :(得分:5)

您想阅读错误的解释,即ld: Assertion failed: (memberIndex != 0) ...吗? Follow this link

另外,不要担心静态库的大小。链接器将删除最终可执行文件中的所有不必要信息。请阅读here

TL; DR版本:

  1. 使用Command-Option-Shift-K清理项目。另外,选择Window > Organizer并切换到Projects标签。单击Derived Data文件夹名称右侧的右箭头,删除Derived Data文件夹,然后重新启动XCode。

  2. 转到Build Settings =&gt;中的project's settingsLinking->Other linker flags =&gt;添加-v。这将显示导致错误的确切损坏文件(如果仍然发生)。如果您再次出现错误,请在此处发布已损坏文件的路径,我们可以从那里开始工作。

  3. 出错的原因是您的某个静态库已损坏。您可以删除4.25gb库并再次重建以查看是否存在此问题。它位于您的项目target settings -> build phases -> link binary with libraries下。如果错误消失,那可能就是这样。在这种情况下,请注意提供lib的名称?

答案 1 :(得分:1)

只是添加到oasisweng的答案。

以下其中一项是否有帮助?: