Как можно предоставить пользовательские флаги компилятора/компоновщика для OpenSSL?
Я пытаюсь создать OpenSSL с -Wa, - noexecstack, но не могу найти нигде в своей командной строке config, чтобы предоставить этот флаг. Я пытался установить CFLAGS, но, похоже, это игнорирует и просто использует свои собственные.
Это автоматическая сборка, работающая с чистой копией источника OpenSSL, поэтому одноразовый взлом конфигурации script на самом деле не является вариантом.
Есть ли способ передать пользовательские флаги в процесс сборки OpenSSL?
Ответы
Ответ 1
config
script игнорирует CFLAGS
, но не CC
. Таким образом, вы можете указать свой компилятор и одновременно указать флаги:
export CC="gcc -Wall -DHELLO_WORLD"; ./config
В качестве альтернативы, поскольку config
автоматически обнаруживает вашу платформу, а затем запускает Configure
с предустановленными настройками компилятора, вы можете добавить флаги компилятора в конфигурацию вашей платформы. Например, для моего mac я вижу эту строку при первом запуске config
:
Operating system: i386-apple-darwinDarwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386
Configuring for darwin-i386-cc
Итак, если я открою Configure
, я могу выполнить поиск darwin-i386-cc
и добавить флаги в пресеты.
Если вы не используете предварительно настроенную конфигурацию, вы просто передаете флаги непосредственно в Configure
в командной строке и будете использовать их.
Ответ 2
Позже на вечеринку, но это, кажется, правильный способ сделать это.
Из справки config
script:
$ ./config -h
Usage: config [options]
-d Add a debug- prefix to machine choice.
-t Test mode, do not run the Configure perl script.
-h This help.
Any other text will be passed to the Configure perl script.
See INSTALL for instructions.
Итак, config
script перенаправляет "неожиданные" параметры в Configure
script. Ну, давайте посмотрим, что скажет об этом Configure
script:
$ ./Configure --help
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]
См. часть [:flags]
в конце этой длинной строки? Внутри файла есть комментарий:
# -<xxx> +<xxx> compiler options are passed through
Это не так очевидно, поскольку он не соответствует хорошо известным стандартам, но ответ: просто добавьте опции в конец командной строки config
.
Как долго прошло с тех пор, как вы разместили вопрос, я должен добавить:
- он может не работать для версии OpenSSL, с которой вы работаете (мой - OpenSSL 1.0);
- Я был вынужден опубликовать этот ответ, поскольку ни один из предыдущих ответов не решил мою проблему, и мне потребовалось немного времени, чтобы выяснить это решение.
Ответ 3
Поздно к партии, но другой способ сделать это - сделать автоматическое редактирование созданного файла makefile. Например, чтобы добавить -DPURIFY
к флагам, сначала выполните обычную настройку, а затем:
perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile
Не самое элегантное решение, но оно работает для меня.