尽管只恢复到32位体系结构,但仍然在Xcode 5.1上出现链接器错误

时间:2014-03-19 17:12:20

标签: ios xcode5.1 arm64

因为我更新了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。设置,但我一直在收到错误,即使在清理之后......任何想法?

谢谢!

4 个答案:

答案 0 :(得分:3)

在我的例子中,解决方案(相反,一种解决方法)是在Build Settings的Linking部分禁用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标志恢复为是不再导致链接错误。

答案 1 :(得分:1)

我刚刚为我的某个应用程序收到了相同的错误消息,并且唯一修复它的方法是将链接时优化更改为否。

答案 2 :(得分:0)

刚遇到同样的错误,

您要做的是转到项目构建设置,并设置“仅构建活动架构”。调试以及发布的。 。 。

这会让你去: - )

答案 3 :(得分:0)

我希望这不是你的问题,但是值得注意的是,你可以在升级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: