#binary #compilation
#двоичный #Сборник
Вопрос:
Я компилирую Apache 2.2.17 для своего 64-разрядного компьютера Mac OS X 10.5.8 Intel, и я предпочитаю 64-разрядную компиляцию, поэтому я указываю необходимые флаги перед ./ configure вот так:
CFLAGS=»-arch x86_64″
но недавно скомпилированный двоичный файл просто не 64-битный:
файл /usr/local/apache/bin/httpd /usr/local/apache/bin/httpd: исполняемый файл Mach-O i386
Я в замешательстве.
Я пробовал такие варианты, как:
CFLAGS=»-arch x86_64″ CXXFLAGS=»-arch x86_64″ LDFLAGS=»-arch x86_64″
все с или без «export» или команды «env» в начале (например, export CFLAGS=»-arch x86_64″) и результат неизменен.
Что может быть не так?
Комментарии:
1. Вы задаете вопрос о том, почему ваш компилятор что-то делает или не делает. Пожалуйста, отредактируйте свой вопрос, чтобы указать, какой компилятор вы используете.
2. # который gcc-4.2 возвращает /usr/bin/gcc-4.2, поэтому это должен быть gcc-4.2
3. В качестве подтверждения того, что я говорю, вот выдержка из config.status (который генерируется командой ./configure) с другой машины Mac OS X 10.5.8, которая, как известно, компилирует Apache с правильными ФЛАГАМИ C amp; CXX:
code
config.status, настроенный с помощью ./configure, сгенерированный GNU Autoconf 2.64, с параметрами «‘-enable-layout=DIYMacServer»-enable-mods-shared=all’ .’-enable-suexec’ ‘-enable- итак, ‘ ‘CFLAGS=-arch x86_64’ ‘CPPFLAGS=-arch x86_64′»code
Очевидно, что флаги C amp; CXX присутствуют. На проблемной машине OS X 10.5.8 тот же раздел config.status не содержит флагов C или CXX4. Вам не нужно возиться с переменными окружения, вы можете передать все для настройки в командной строке с помощью
./configure CFLAGS="-foo -bar" CPPFLAGS=-foo -bar -baz"
. Кроме того, установка CFLAGS (с помощью переменных среды или в командной строке) обычно предотвращает установку любых CFLAGS по умолчанию, убедитесь, что это не ваша проблема. Наконец, может ли простой тест быть скомпилирован 64-разрядным?int main(void) {return 0;}
тогдаgcc -arch x86_64 simple_test.c
.5. Спасибо за советы. Что ж, после еще нескольких попыток я, наконец, выяснил причину. Это ./configure просто не учитывает никаких переменных среды (или оболочки), если они не введены в той же командной строке. Я вводил переменные оболочки за одну командную строку до того, как ввел ./configure —[options] и поэтому забыл переменную оболочки (ФЛАГИ C amp; CXX) Все должно быть введено в одной компактной строке, как в приведенном вами примере. О, и этот простой тест должен быть полностью скомпилирован 64-битным, потому что gcc и переменная flags вводятся в одной строке.