Можете ли вы скомпилировать 32-битные Apache DSO (сервер Oracle HTTP) на 64-битной машине?

StackOverflow https://stackoverflow.com/questions/693733

Вопрос

Я перенес базу данных Oracle и установку HTTP-сервера Oracle с 32-разрядной машины на 64-разрядную машину — обе машины работают под управлением Linux.База данных Oracle является 64-битной, а HTTP-сервер (Apache) — 32-битным.

Я использую некоторые DSO, отличные от Oracle (например, mod_ntlm), но всякий раз, когда я запускаю стандартную команду типа «make install», я получаю 64-битный модуль.

Существует ли стандартный способ компиляции 32-битных модулей Apache на 64-битной машине?

Это было полезно?

Решение

В качестве альтернативы ответу Эндрю Медико используйте '-m32' для 32-битных компиляций и '-m64' для 64-битных компиляций на машинах PPC, SPARC или Intel - поскольку вы фактически не указываете, какую архитектуру чипа вы используете, и эта нотация работает на всех них.

Я часто использую:

CC="gcc -m32" ./configure

для обеспечения 32-битной компиляции (или, чаще, CC="gcc -m64" для обеспечения 64-битной компиляции).


Вопрос:«Является ли CC переменной среды, используемой make?»

Отвечать:Да, хотя в данном случае это тоже признается configure, который представляет собой сценарий оболочки, созданный autoconf.Обозначение, которое я использовал (то, что я использую в командной строке), устанавливает CC в среде, в то время как configure команда выполняется.Другой ответ предлагает использовать:

./configure CC="gcc -m32"

Я предполагаю, что это работает и дает примерно тот же эффект;Я не пробовал, поэтому не знаю, работает ли это.

Если ты бежишь ./configure --help | less, вы увидите информацию (часто просто стандартную информацию) о том, как использовать скрипт.И в конце будут перечислены (некоторые) соответствующие переменные среды, одной из которых является CC.

Преимущество установки компилятора C на «gcc -m32» заключается в том, что 32-битный флаг устанавливается каждый раз, когда используется компилятор — вероятность ошибок очень мала.Если вы установите переменную flags (CFLAGS и т. д.), есть вероятность, что какая-то команда не будет ее использовать, и тогда все может пойти наперекосяк.

Кроме того, возвращаясь к вопросу, make обязательно использует переменную (макрос) с именем CC.И вы можете установить это в командной строке make:

make CC="gcc -m32"

Это переопределяет любые настройки в make-файле.Напротив, при использовании переменной среды настройка в make-файле переопределяет значение в среде, поэтому установка CC в качестве переменной среды менее полезна.Хотя make -e дает среде приоритет над make-файлом, обычно это опасный вариант, поскольку он может иметь неожиданные побочные эффекты.

Другие советы

./configure CFLAGS="-march=i686" 

должен это сделать

Наряду с флагом -m32 в gcc вам может потребоваться включить флаг -melf_i386 для ld, чтобы правильно связать 32-битные объектные файлы с 32-битными библиотеками, если у вас есть как 32-битные, так и 64-битные библиотеки.Стандартный ld в 64-битных Linux-системах по умолчанию использует 64-битные библиотеки, и при связывании вы получаете ошибку совместимости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top