2010-07-28 3 views
14

Это может быть очень глупый вопрос, но я новичок в разработке на Mac, и мне трудно с универсальными бинарниками.Как скомпилировать универсальные библиотеки на Mac OS X?

У меня есть приложение, которое я компилирую в QT Creator, который, согласно липо, производит выходы архитектуры i386. Насколько я понимаю, это означает, что он производит 32-разрядные выходы Mac OS X.

Приложение зависит от двух внешних библиотек. Одна из этих библиотек, которую я компилирую, сначала вызываю ./config, а затем создаю. ./config указывает, что он «настроен для darwin-i386-cc». Тем не менее, после запуска make и вызова липо на результат, архитектура объявляется как x86_64.

Аналогично, у меня есть другая внешняя библиотека. У этого нет скрипта configure, и я его скомпилирую просто путем вызова make. Результатом этого является также x86_64.

Как скомпилировать эти две внешние библиотеки, чтобы они что-то совместили с выходом i386 моего приложения? Еще лучше, как я могу скомпилировать эти две внешние библиотеки для создания универсальных библиотек, чтобы я мог создавать универсальный двоичный код из моего приложения, которое работает как на 32, так и на 64 бит?

Также, исходя из текущего состояния мира Mac, существуют ли какие-либо другие платформы, на которых я должен рассчитывать, чтобы создать подходящую, удобную для пользователя универсальную двоичную систему Mac OS X?

ответ

13

Наконец-то он работает.

Для управления архитектурой цели я вручную включил и отредактировал Makefile.

Для одного из них я добавил к концу строки, которая начинается с CFLAGS: -arch i386 -arch x86_64 -arch ppc Это создало универсальный двоичный файл.

Для другого, когда я сделал то же самое, компилятор ошибся. Мне пришлось перебирать и только поместить одну арку за раз, а затем после того, как я произвел все три, я назвал липо на них флагом -create, чтобы создать универсальный двоичный файл.

+0

Знаете ли вы, что это также работает для добавления поддержки iOS – tofutim

+0

ahd, что это за универсальная библиотека, разве это все разные компиляции, раздавленные вместе? тогда вы закончите с огромной библиотекой? – tofutim

1

Я не могу ответить на основную часть вашего вопроса, потому что я всегда использую Xcode, а не make. Но что касается этой последней части, если вы поддерживаете версии ОС до 10.6, вам может понадобиться компиляция для PowerPC (arch. Code "ppc").

+0

Являются ли PowerPC чем-то, что ожидает значительная часть потребительского рынка Mac? Итак, для универсальных двоичных файлов ожидаются 3 платформы? – Nantucket

+1

Я не знаю, что такое процент, но я все еще поддерживаю PowerPC, и я думаю, что многие другие продукты. И я еще не поддерживаю 64 бита, потому что мой продукт частично Carbon. Но если вы разрабатываете новый продукт сейчас, было бы необоснованным идти только на Intel. Рассмотрите свой рынок: некоторые сегменты, например образование, могут висеть на старом оборудовании дольше других. – JWWalker

+1

Еще одна вещь: насколько я знаю, термин «универсальный двоичный» обычно означает i386 + ppc, а не i386 + x86_64. – JWWalker

7

для ./configure, вы можете использовать это:

./configure CFLAGS = "- ARCH i386 -arch x86_64" CXXFLAGS = "- ARCH i386 -arch X86_64" LDFLAGS = "- арх i386 -arch x86_64 "--disable-dependency-tracking

- Отслеживание зависимостей является важным, или gcc/g ++ отказывается от компиляции кода.

Смежные вопросы