升级到XCode 4后无法连接ppc

8
我按照这些说明来使升级到XCode 4后,PPC与10.4 SDK能够正常工作。我可以编译,但在链接时出现错误。
此外,我并没有使用XCode本身,而是使用它附带的gcc工具链。(这是一个使用makefile的大型跨平台项目的一部分。)
下面是一个示例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系统上运行良好。


好的,我再次回答了你的问题,希望这两个解决方案中的任何一个都能解决你的问题。 - Mecki
1个回答

5

由于您正在使用命令行gcc(Unix开发包),而不是/Developer/Xcode3的GCC,因此将使用/usr的GCC,我没有改动我的原始描述。要将PPC支持恢复到命令行GCC,您至少需要执行jas在这个答案中指出的步骤。或者您可以修改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是有效的。然而,当使用/usr/bin/g++-4.0时,你提供的修复方法并没有帮助。我的解决方法是将/usr/bin/g++-4.0建立符号链接到/Developer/usr/bin/g++-4.0。无论如何,感谢你让我找到了正确的方向! - paleozogt

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