2011-10-19 5 views
14

Próbuję zbudować OpenSSL z opcją -Wa, - noexecstack, ale nie mogę znaleźć nigdzie w jego wierszu poleceń, aby podać tę flagę. Próbowałem ustawić CFLAGS, ale wydaje się, że to zignorować i po prostu użyć własnego.W jaki sposób można zapewnić niestandardowe flagi kompilatora/linkera dla OpenSSL?

To jest zautomatyzowana kompilacja działająca na czystej kopii źródła OpenSSL, więc jednorazowa próba skryptu konfiguracyjnego nie jest tak naprawdę opcją.

Czy istnieje sposób przekazywania niestandardowych flag do procesu budowania OpenSSL?

+0

Należy zauważyć, że dokumentacja faktycznie sugeruje wykonanie tych zmian, których chciałbyś uniknąć - zobacz https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings, gdzie mówią o działaniu sed jako części twojej kompilacji. –

Odpowiedz

12

Skrypt ignoruje CFLAGS, ale nie CC. Tak więc można określić kompilator i nadać mu flagi w tym samym czasie:

export CC="gcc -Wall -DHELLO_WORLD"; ./config 

Alternatywnie, ponieważ config auto wykrywa platformę, a następnie uruchamia Configure z zaprogramowanymi ustawieniami kompilatora, można dodać flagi kompilatora do konfiguracji platformy . Na przykład, na moim Macu, widzę tę linię, kiedy pierwszy raz uruchomić 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 

Więc jeśli mogę otworzyć Configure, mogę szukać darwin-i386-cc i dodać flagi do ustawień.

Jeśli nie używasz gotowej konfiguracji, wystarczy przekazać flagi bezpośrednio do Configure w linii poleceń, a będzie z nich korzystać.

3

Późno na imprezę, ale innym sposobem zrobienia tego jest automatyczna edycja wygenerowanego pliku Makefile. Na przykład, aby dodać -DPURIFY z flagami, po raz pierwszy zrobić regularne skonfigurować, a następnie:

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

Nie jest to najbardziej eleganckie rozwiązanie, ale działa dla mnie.

+0

To wydaje się być jedynym sposobem na usunięcie lub zastąpienie flagi. –

20

Później na imprezę, ale wydaje się, że jest to właściwy sposób.

Z pomocą config skryptu:

$ ./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. 

Więc skrypt config przekazuje "Unexpected" opcje do skryptu Configure. Dobrze, pozwala zobaczyć, co skrypt Configure ma do powiedzenia na ten temat:

$ ./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] 

Zobacz [:flags] część na końcu tej długiej kolejce? Istnieje również komentarz wewnątrz pliku:

# -<xxx> +<xxx> compiler options are passed through 

To nie jest takie oczywiste, ponieważ nie wynika dobrze znane standardy, ale odpowiedź brzmi: po prostu dołączyć opcje na końcu wiersza poleceń config.

Jak długo czasu minęło od kiedy pisał na pytanie, muszę dodać:

  • może nie działać dla wersji OpenSSL, na którym pracujemy (kopalnia jest OpenSSL 1.0);
  • Czułam się zmuszona opublikować tę odpowiedź, ponieważ żadna z poprzednich odpowiedzi nie rozwiązała mojego problemu i zajęło mi trochę czasu, aby znaleźć rozwiązanie.
+1

Okazało się, że to nie jest użyteczne. W większości przypadków będziesz potrzebował _set_ cflags; to po prostu je dołącza. Nie pomaga pozbyć się złych, które już istnieją. –

Powiązane problemy