2011-10-19 11 views
14

私は、-WaとOpenSSLを構築しようとしている - noexecstackが、このフラグを提供するために、どこかそのconfigコマンドラインで見つけることができません。私はCFLAGSを設定しようとしましたが、それを無視して、それを使用するように見えます。OpenSSL用にカスタムのコンパイラ/リンカーフラグを提供するにはどうすればよいですか?

これには、configスクリプトのワンタイムハックは本当にオプションではありません、OpenSSLのソースのクリーンコピーをオフに取り組んで自動ビルドです。

のOpenSSLのビルドプロセスにカスタムフラグを渡す方法はありますか?

+0

注 - 彼らは一部としてsedの実行中の話を参照https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings、あなたのビルドの。 –

答えて

12

configスクリプトはCFLAGSを無視しますが、CCは無視します。つまり、あなたのコンパイラを指定すると同時に、それにフラグを与えることができます。また

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

config自動お使いのプラットフォームを検出し、プリセットのコンパイラ設定でConfigureを実行するので、あなたのプラットフォーム構成にコンパイラフラグを追加することができます。私が最初にconfigを実行したときに、例えば、私のMac用、私はこの行を参照してください。

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に直接フラグを渡すと思いますし、それはそれらを使用します。

3

パーティーに後期が、これを行うための別の方法は、生成されたメイクファイルに自動化された編集を行うことがあります。

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

は、最もエレガントな解決策が、それは私のために動作します。例えば、私はまず、定期のconfigureを行い、フラグに-DPURIFYを追加します。その後、相手に

+0

これは、フラグを削除または置換する唯一の方法のようです。 –

20

が、これはこれを行うための正しい方法のようです。 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 --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]一部を参照してください:まあ、Configureスクリプトはそのことについて言っているものを見ることができますか?

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

それはそれはよく知られている標準規格に従っていませんので、その明白ではないのですが、答えは次のとおりです:ちょうどconfigコマンドラインの最後にオプションを追加し、ファイル内のコメントもあります。

あなたが質問を投稿するので、長い時間が経過したよう

、私は追加する必要があります。それはあなたが作業しているのOpenSSLのバージョンでは動作しない場合があり

  • (私には、OpenSSL 1です。0)。
  • 前回の回答で問題が解決されていなかったので、この回答を投稿する必要があり、その解決策を理解するのに少し時間がかかりました。ドキュメントは、実際にあなたが避けたいのですが、それらの編集を行うことを示唆していることを
+1

これは役に立ちません。ほとんどの場合、_set_ cflagsする必要があります。これはそれらを追加するだけです。すでにある悪いものを取り除くのに役立たない。 –

関連する問題