2011-12-14 22 views
5

Ponieważ Apple nie obsługuje GCC 4.6 lub GCC 4.7, właśnie przełączyłem się na kompilację MacPorts GCC 4.6/4.7. Miałem jednak problem z budowaniem kodu w architekturze "Universal".Czy mogę skompilować uniwersalny kod za pomocą GCC Macports?

Tradycyjnie robiłbym g++ -arch i386 -arch x86_64 ..., aby skompilować mój plik binarny dla architektury co najmniej i386/x86_64. Zrobiłem trochę wyszukiwania i zdałem sobie sprawę, że opcja -arch jest obsługiwana tylko przez kompilatory Apple. Oczywiście nie działało to z komputerami Macports. Najlepsze, co mogę zrobić, to użyć opcji -m32/-m64, aby określić żądaną architekturę. Jednak spowoduje to utworzenie binarnego pliku w formacie i386 lub x86_64. To, czego naprawdę chcę, to uzyskać plik binarny zarówno w architekturze (Universal), jak i w przypadku oryginalnych kompilatorów GCC.

Czy to nie jest obsługiwany lub znany problem? Próbowałem przez całą noc szukając odpowiedzi w Google, ale nie dostałem nic przydatnego. Więc po prostu zaczynam wątpić, czy jestem jedyną osobą, która miała ten problem i przeoczyłem coś naprawdę ważnego, żeby to zadziałało? Naprawdę doceniam, czy ktoś może dać mi jakieś sugestie.

BTW. Zainstalowałem warianty gcc46 +universal, ale nie wyprodukowałem niczego naprawdę uniwersalnego oprócz kompilowania oddzielnych plików binarnych dla każdej architektury.

Xing.

Odpowiedz

3

Można łączyć pliki binarne z różnymi architekturami w jeden uniwersalny przy użyciu lipo.

+0

Dzięki, że działa. Nie wiedziałem, że istnieje lipo, chyba wszystko, czego naprawdę potrzebuję, to lipo. Potrzebuję zmienić niektóre moje pliki Makefile, aby zatrzymać flagę arch i użyć lipo do stworzenia uniwersalnego kodu teraz :) –

6

Och, właśnie miałem ten problem i spędziłem na nim dość dużo czasu. Okazuje się, że wersja GCC 4.2.1 w wersji na jabłka jest w rzeczywistości tylko opakowaniem, które honoruje kilka flag (szczególnie flagą -arch), a następnie używa lipo do przyklejenia plików obiektów do grubego obiektu. Trochę zmodyfikowałem ten sterownik tak, by obejmował on GSP Macports, jednocześnie zachowując flagę -arch i generując wielorakie pliki obiektów (w każdym razie dla 32-bitowych i 64-bitowych danych wywiadowczych).

Właśnie napisali dość obszerny napisać o tym, jak to zrobić:

http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html