【问题标题】:Keep getting linker errors on Xcode 5.1 despite reverting to 32bit architectures only尽管只恢复到 32 位架构,但在 Xcode 5.1 上仍然出现链接器错误
【发布时间】:2014-03-19 17:12:19
【问题描述】:

自从我更新到 Xcode 5.1,将标准架构更改为也包括 arm64,我不断从链接器收到以下错误:

0  0x109157f93  __assert_rtn + 144
1  0x1091faed4  ld::passes::stubs::Pass::makeStub(ld::Atom const&, bool) + 0
2  0x1091fb5f7  ld::passes::stubs::Pass::process(ld::Internal&) + 497
3  0x1091fbc07  ld::passes::stubs::doPass(Options const&, ld::Internal&) + 111
4  0x109158b50  main + 772
5  0x7fff8568b5fd  start + 1
A linker snapshot was created at:
    /tmp/MyApp-2014-02-19-175731.ld-snapshot
ld: Assertion failed: (target != NULL), function stubableFixup, file /SourceCache/ld64/ld64-236.3/src/ld/passes/stubs/stubs.cpp, line 126.
clang: error: linker command failed with exit code 1 (use -v to see invocation)

鉴于我使用仅为 armv7 编译的第三方库,我尝试在项目和目标的构建设置中将架构和有效架构选项设置为仅包含 armv7,但我不断收到错误消息,即使在清洁之后...有什么想法吗?

谢谢!

【问题讨论】:

    标签: ios xcode5.1 arm64


    【解决方案1】:

    在我的情况下,解决方案(一种解决方法 - 相反)是在构建设置的链接部分禁用 Dead Code Stripping 功能。

    Xcode 5.1 中似乎存在一个关于此功能和 Link Time Optimization 的错误(我已经将其设置为 NO)。

    更多信息可以在这里找到:https://devforums.apple.com/message/950372#950372

    编辑(2014-04-18):

    从 Xcode 5.1.1 开始,该问题似乎已得到解决,因为将 Dead Code Stripping 标志重新设置为 Yes 不再导致链接错误。

    【讨论】:

      【解决方案2】:

      我的一个应用程序刚刚收到相同的错误消息,唯一为我解决的问题是将链接时间优化更改为否。

      【讨论】:

        【解决方案3】:

        刚刚遇到同样的错误,

        您要做的是转到项目构建设置,并将“仅构建活动架构”设置为 NO 以进行调试和发布。 . .

        这会让你继续前进:-)

        【讨论】:

        • 不幸的是,我已经在项目和目标的构建设置中将该标志设置为 NO!
        【解决方案4】:

        我希望这不会离您的问题太远,但值得注意的是,您可以在升级 Xcode 后保留旧的 SDK 以供使用。在升级之前备份以下文件夹的内容也不错:

        $(xcode-select --print-path)/Platforms/*/Developer/SDKs
        

        旧的 SDK 可以在升级后复制回来。显然,最好尽可能使用最新的 SDK,但有时截止日期和开发现实需要继续使用有效的 SDK,直到可以重新编写代码。

        此过程也可以半自动执行。只需在新位置安装最新的 Xcode 版本(保持旧版本不变)并将现有 SDK 与以下脚本链接:

        platforms_path="$1/Contents/Developer/Platforms";
        if [ -d $platforms_path ]; then
            for platform in `ls $platforms_path`
            do
                sudo ln -sf $platforms_path/$platform/Developer/SDKs/* $(xcode-select --print-path)/Platforms/$platform/Developer/SDKs;
            done;
        fi;
        

        您只需为其提供旧的.app 的路径:

        ./xcode.sh /Applications/Xcode-463.app
        

        关于这个问题的更多信息:

        你可以在这里找到旧版本的 Xcode:

        【讨论】:

        • 谢谢你的回答,这很有启发性,即使不是真正解决基本问题!
        猜你喜欢
        • 2014-01-08
        • 2014-04-15
        • 2016-04-05
        • 2021-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多