【问题标题】:Unable to link ppc after upgrading to XCode 4升级到 XCode 4 后无法链接 ppc
【发布时间】:2011-07-21 13:24:54
【问题描述】:

我关注these instructions,了解如何在升级到 XCode 4 后让 10.4 SDK 与 PPC 一起工作。我能够编译,但在链接时出错。

另外,我使用的不是 XCode 本身,而是它附带的 gcc 工具链。 (这是使用 makefile 的大型跨平台项目的一部分。)

这是一个示例生成文件:

CXX=g++-4.0
CXXFLAGS=-arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4

helloworld: helloworld.o
    $(CXX) $^ -o $@ $(CXXFLAGS)

带有 helloworld.cpp:

#include <stdio.h>

int main(void) {
    printf("hello world \n");
    return 0;
}

这是它的输出:

$ make
g++-4.0 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4   -c -o helloworld.o helloworld.cpp
g++-4.0 helloworld.o -o helloworld -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4
ld: in /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/crt1.o, in section __TEXT,__text reloc 1: sectionForNum(4) section number not for any section for architecture ppc
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/NK/NK2TdejFFfOupEszIr4fG++++TM/-Tmp-//ccryAbut.out (No such file or directory)
make: *** [helloworld] Error 1

顺便说一句,这个确切的 makefile 在 XCode 3 系统上运行良好。

【问题讨论】:

  • 好的,我又回答了你的问题,希望这两种方案都可以解决你的问题。

标签: xcode macos xcode4 universal-binary powerpc


【解决方案1】:

由于您使用的是 命令行 gcc(Unix 开发包),因此不会使用 /Developer/Xcode3 的 GCC,而是使用 /usr 的 GCC,我有没碰我原来的描述。要恢复命令行 GCC 的 PPC 支持,您至少必须执行 jas 指出的in this answer。或者您更改您的 Makefile 以使用来自/Developer 的 gcc(我在执行这些命令之前在当前工作目录中创建了您的 helloworld.cpp):

$ /Developer/usr/bin/g++-4.0 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4   -c -o helloworld.o helloworld.cpp
$ /Developer/usr/bin/g++-4.0 helloworld.o -o helloworld -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4
ld: warning: object file compiled with -mlong-branch which is no longer needed. To remove this warning, recompile without -mlong-branch: /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/crt1.o
ld: warning: object file compiled with -mlong-branch which is no longer needed. To remove this warning, recompile without -mlong-branch: /Xcode3/usr/bin/../lib/gcc/powerpc-apple-darwin10/4.0.1/crt3.o
$ ./helloworld 
hello world 

您可以放心地忽略这两个警告。不幸的是,GCC 4.0 不支持-mno-long-branch,这对于避免长分支是必要的。

【讨论】:

  • 使用/Developer/usr/bin/g++-4.0 有效。但是,fix you linked to 在使用 /usr/bin/g++-4.0 时没有帮助。我的解决方法是将/usr/bin/g++-4.0 符号链接到/Developer/usr/bin/g++-4.0。无论如何,感谢您让我走上正轨!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
相关资源
最近更新 更多