Могу ли я скомпилировать универсальный код, используя GCC Macports? - PullRequest
5 голосов
/ 14 декабря 2011

Поскольку Apple не поддерживает GCC 4.6 или GCC 4.7, я просто переключился на сборку MacPorts GCC 4.6 / 4.7.Однако у меня возникла проблема при построении моего кода в «универсальной» архитектуре.

Традиционно я бы сделал g++ -arch i386 -arch x86_64 ..., чтобы скомпилировать мой двоичный файл как минимум для архитектуры i386 / x86_64.Я провел поиск и понял, что опция -arch поддерживается только компиляторами Apple.Так что, конечно, это не сработало с Macports ».Лучшее, что я могу сделать, - это использовать -m32 / -m64, чтобы указать архитектуру, которую я хочу.Тем не менее, это будет производить только двоичный код в формате i386 или x86_64.Что я действительно хочу, так это получить двоичный файл в обеих архитектурах (Universal), как это было сделано с оригинальными компиляторами GCC.

Это не поддерживается или известная проблема?Я всю ночь пытался найти ответы в Google, но ничего полезного не получил.Поэтому я просто начинаю сомневаться в том, что у меня одна такая проблема, и я что-то упустил, чтобы заставить ее работать?Очень признателен, если кто-нибудь может дать мне несколько предложений.

Кстати.Я установил gcc46 +universal вариантов, но он не дал ничего действительно универсального, кроме компиляции отдельных двоичных файлов для каждой архитектуры.

Xing.

Ответы [ 2 ]

6 голосов
/ 02 марта 2012

О, у меня просто была эта проблема, и я потратил довольно много времени на нее. Оказывается, что яблочная версия GCC 4.2.1 на самом деле является просто оболочкой, которая поддерживает несколько флагов (в частности, флаг -arch), а затем использует lipo, чтобы соединить объектные файлы обратно в толстый объект. Я немного изменил этот драйвер, чтобы он оборачивал macports GCC, сохраняя при этом флаг -arch и создавая объектные файлы multi arch (в любом случае для 32-битных и 64-битных Intel).

Я только что опубликовал довольно обширную статью о том, как это сделать:

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

3 голосов
/ 14 декабря 2011

Вы можете объединить двоичные файлы с различными архитектурами в один универсальный, используя lipo .

...