【问题标题】:xcodebuild linker assertion failurexcodebuild 链接器断言失败
【发布时间】:2016-07-20 14:34:24
【问题描述】:

我在使用 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”编译器标志启用位码来构建我的框架时,才会出现此问题。

另外,在我的 ld 命令中,我试图链接几个静态库,其中一个是 > 4.25 GB(内置位码),并且这个大小超过了无符号 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

【问题讨论】:

  • 4.25 GB 静态库?!? :o

标签: ios xcode ld bitcode


【解决方案1】:

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

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

TL; DR 版本:

  1. 使用Command-Option-Shift-K 清理您的项目。此外,选择Window &gt; Organizer 并切换到Projects 选项卡。点击Derived Data文件夹名称右侧的右箭头,删除Derived Data文件夹,重启XCode。

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

  3. 您的错误原因是因为您的一个静态库已损坏。您可以删除 4.25gb 库并重新构建以查看是否是问题所在。它位于您项目的target settings -&gt; build phases -&gt; link binary with libraries 下。如果错误消失,可能就是这样。在这种情况下,注意给出库的名称吗?

【讨论】:

  • 谢谢。我试过#1 和#2,他们给了我同样的错误。 -v 也没有提供太多额外的信息。对于#3,如果我删除静态库,链接器将抱怨未解决的符号错误,因为链接框架时代码的其他部分需要该库。
  • 这个库叫什么?此外,项目设置中的Generate Debug Symbols 可以帮助您在构建时减少静态库的大小。
【解决方案2】:

只是添加到 oasisweng 的答案。

以下其中一项有帮助吗?:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2010-09-26
    • 2018-11-09
    相关资源
    最近更新 更多