CFLAGS не учитывается, почему?

#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 или CXX

4. Вам не нужно возиться с переменными окружения, вы можете передать все для настройки в командной строке с помощью ./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 вводятся в одной строке.