Невозможно связать PPC после обновления до XCode 4 - PullRequest
8 голосов
/ 23 марта 2011

Я следовал этим инструкциям о том, как заставить 10.4 SDK работать с PPC после обновления до XCode 4. Я могу скомпилировать, но он выдает ошибку во время соединения.

В качестве дополнительной складки я не использую XCode как таковой, а набор инструментов gcc, который поставляется вместе с ним. (Это часть большого кроссплатформенного проекта, использующего make-файлы.)

Вот пример файла сборки:

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

Кстати, этот точный make-файл отлично работает в системе XCode 3.

1 Ответ

5 голосов
/ 28 марта 2011

Поскольку вы используете командную строку gcc (Unix Development Package), будет использоваться не GCC /Developer или /Xcode3, а тот из /usr, которого у меня нет коснулся моего оригинального описания. Чтобы восстановить поддержку PPC в командной строке GCC, вам нужно сделать, по крайней мере, то, что jas указал в этом ответе . Или вы можете изменить свой Makefile, чтобы использовать вместо него gcc из /Developer (я создал ваш 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, что необходимо для избежания длинных ветвей.

...