Как я могу скомпилировать объектный код для неправильной системы и кросс-компиляции - PullRequest
0 голосов
/ 11 августа 2009

Ссылка на этот вопрос о компиляции. Я не понимаю, как моя программа для Mac может использовать правильный -arch, скомпилировать с этими флагами -arch, флаги -arch для системы, на которой я работаю (ppc64 g5), и все еще генерировать неправильный объектный код.

Кроме того, если бы я использовал кросс-компилятор и работал в Linux, произвел код 10.5 для Mac, как это могло бы отличаться от того, что я описал выше?

Предпосылкой является то, что я пытался скомпилировать различные модули Apache. Они компилируются с -arch ppc, ppc64 и т. Д. Я не получаю ошибок, и я получаю свой mod_whwhat.so. Но apache всегда будет жаловаться, что какой-то символ не найден. По-видимому, это связано с тем, что создает компилятор, хотя тип файла говорит, что он предназначен для ppc, ppc64, i386, x_64 (универсальный двоичный файл) и, похоже, соответствует всем другим модам .so, которые у меня есть.

Полагаю, я не понимаю, как она могла без проблем скомпилироваться для моей системы, а затем сказала, что моя система не может ее использовать. Может быть, я не понимаю, что на самом деле дает мне компилятор.

РЕДАКТИРОВАТЬ: все сообщения об ошибках и полный процесс можно увидеть здесь .

Спасибо.

1 Ответ

1 голос
/ 12 августа 2009

Глядя на другой поток и в другом месте и без установки G5 или OSX Server, я могу сделать только несколько комментариев и предложений, но, возможно, они помогут.

  1. Как правило, не рекомендуется изменять установленное программное обеспечение производителя o / s. Установка нового модуля Apache менее проблематична, чем, скажем, перезапись существующей библиотеки, но вы все еще зависите от поставщика в том, что обновление программного обеспечения может удалить ваши модификации и, кроме того, вам нужно выяснить, как версия поставщика была построен в первую очередь. Обычная практика в мире OS X - избегать этого, делая совершенно отдельную установку продукта с открытым исходным кодом, такого как Apache, используя, например, MacPorts . В этом есть и свои минусы: для достижения высокого уровня независимости MacPorts часто загружает и создает множество зависимых пакетов для вещей, которые уже находятся в OS X, но в этом нет никакого вреда, кроме некоторых дополнительных циклов сборки и дискового пространства. .

  2. Тем не менее, должна быть возможность создавать и устанавливать модули Apache в дополнение к модулям, поставляемым Apple. Apple публикует изменения, которые она вносит в продукты с открытым исходным кодом здесь ; вы можете перейти к разным версиям, чтобы найти каталог apache, который содержит исходный код, Makefile и примененные патчи. Это может помочь.

  3. Убедитесь, что созданный вами мод _ *. Действительно 64-битный и не зависит от не-64-битных библиотек. Используйте otool -L mod_*.so для просмотра динамических библиотек, на которые ссылается каждая, а затем используйте file для этих библиотек, чтобы убедиться, что у них всех есть варианты ppc64.

  4. Убедитесь, что вы используете новейшие инструменты разработчика (Xcode 3.1.3 является актуальным).

  5. Несмотря на то, что в цепочке инструментов разработчика используются многие компоненты с открытым исходным кодом, Apple усовершенствовала многие из них, и есть большие различия в ABI OS X, универсальной поддержке двоичных файлов, динамических библиотеках и т. Д. Суть в том, что кросс-компиляция объектно-ориентированного кода OS X в Linux (или любой другой платформе, не относящейся к OS X) не поддерживается и не практичен.

...