尽管仅回归到32位架构,但在Xcode 5.1上仍然出现链接错误。

3
自从我升级到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个回答

3
在我的情况下,解决方案是在构建设置中的链接部分禁用“死代码剥离”功能(一种变通方法)。 Xcode 5.1 中存在一个关于此功能和“链接时优化”功能(我已将其设置为NO)的错误。更多信息可以在此处找到:https://devforums.apple.com/message/950372#950372
编辑(2014-04-18):
问题似乎已在Xcode 5.1.1中得到解决,因为将“死代码剥离”标志改回Yes不再导致链接错误。

1

我刚刚遇到了同样的应用程序错误信息,唯一能解决它的方法是将链接时优化设置为“否”。


0

刚遇到了同样的错误,

你需要做的是进入项目构建设置,并将“仅构建活动架构”设置为,同时适用于调试和发布。. . .

这样就可以让你继续前进了 :-)


很不幸,我已经将该标志设置为NO,无论是在项目的构建设置中还是在目标的构建设置中! - micamoita

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:


谢谢你的回答,这非常有教育意义,即使不是解决基本问题的真正方法! - micamoita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接