Как скомпилировать универсальные библиотеки в Mac OS X?

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

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

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

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

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

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

Ответы

Ответ 1

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

Чтобы управлять архитектурой цели, я вручную включил и отредактировал Make файлы.

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

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

Ответ 2

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

./configure CFLAGS = "- arch i386 -arch x86_64" CXXFLAGS = "- arch i386 -arch x86_64" LDFLAGS = "- arch i386 -arch x86_64" --disable-dependency-tracking

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

Ответ 3

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