Как предоставить пользовательские флаги компилятора / компоновщика для OpenSSL? - PullRequest
18 голосов
/ 20 октября 2011

Я пытаюсь собрать OpenSSL с -Wa, - noexecstack, но не могу найти нигде в его командной строке config, чтобы обеспечить этот флаг. Я пытался установить CFLAGS, но он, кажется, игнорирует это и просто использует свой собственный.

Это автоматическая сборка, работающая на чистой копии исходного кода OpenSSL, поэтому одноразовый взлом сценария конфигурации на самом деле не вариант.

Есть ли способ передать пользовательские флаги процессу сборки OpenSSL?

Ответы [ 3 ]

21 голосов
/ 29 октября 2013

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

Из справки сценария config:

$ ./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 продвигается вперед«неожиданные» опции для скрипта Configure.Что ж, давайте посмотрим, что скажет сценарий Configure об этом:

$ ./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);
  • Я чувствовал себя обязанным опубликовать этот ответ, поскольку ни один из предыдущих ответов не решил мою проблему, и мне потребовалось немного времени, чтобы найти это решение.
13 голосов
/ 20 октября 2011

Сценарий config игнорирует 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 в командной строке, и он будет использовать их.

4 голосов
/ 27 апреля 2013

Поздно, но еще один способ сделать это - автоматически редактировать сгенерированный make-файл.Например, чтобы добавить -DPURIFY к флагам, я сначала выполняю обычную настройку, затем:

perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile

Не самое элегантное решение, но оно работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...