FreeBSDシステムで(gccの代わりに)clangを使ってopensslを構築する方法は?

FreeBSDシステムで(gccの代わりに)clangを使ってopensslを構築する方法は?

私は64ビットFreeBSDビルドマシンを持っています。 Python3アプリケーションコードにhttpsサポートを追加する必要があります。これを行うには、opensslサポートでPythonをビルド/コンパイルすることをお勧めします。最終実行可能ファイルには gcc 依存関係は必要ありません。

だから私はclangを使ってPythonを構築します。しかし、それ以前はopensslをビルドするときにこれを行うことはできませんでした。

私も「set CC clang」を使用しました。しかし、opensslはまだgccをcコンパイラとして使用しています。したがって、最終的な動的実行可能ファイルで「ldd」を実行すると、libcの依存関係が表示されます。

リンクには FreeBSD と clang の内容はありません。 (https://wiki.openssl.org/index.php/Compilation_and_Installation)

いくつかの選択肢を提案してもよろしいですか?

\bin\sh[編集] これはシェルで実行するコマンドです

set CC clang

./config -fPIC

出力でgccが使用されていることを示す次の行が見つかりました。

BN_ASM =x86_64-gcc.o

答え1

以下にまとめたように、多くの問題を経験しているようです。あなたほぼ確実デフォルトのFreeBSD OpenSSLを使用する@mjturnerが指摘したPythonポートを使用する必要があります。

  • csh構文でset CC clang2つの変数と空の文字列を設定しますが、それでも機能しません(次のトピックを参照)。CCclangset CC=clang
  • 単にシェルで変数を設定すると、csh実際に使用したい他の項目には影響しませんsetenv CC clang(この変数は使用されません=)。configshスクリプトなので、これを表示するには変数をエクスポートする必要があります。
  • libcはいいいえ依存関係gcc、動的に接続されたほとんどすべてがlibcに接続されます(FreeBSDではGNU glibcではありません)。もう一つの方法は接続することです。静的可能であれば、必須コードを最終バイナリに挿入して動的依存関係を削除します。 (一部のプラットフォームとの使用時に例外処理に依存する可能性gccがあります。回避するのは難しいです。)Pythonを静的に接続する際に問題があると予想しています。libgcc

バイナリ配布(関連するライセンス契約を注意深く読んだと仮定)など、特定の目的のためにclangを使用してOpenSSLとPythonを構築したり、特定のソフトウェアバージョンの要件がある場合は正しく設定できることがわかりCCました。OpenSSLポートこれを行う代わりに、スクリプトからgccコマンドをパッチし、Configure環境FREEBSDCC変数を使用するように選択します。

その他の提案:

  • clangの使用の詳細については、OpenSSL Wikiを参照してください。https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings clang はい実際には取り上げましたが、FreeBSDではありません。なぜなら、すべてのBSDが等しいと見なされるからです。
  • OpenSSLをビルドしてから必ずmake test実行してください。
  • すべてが同じコンパイラでコンパイルされていることを確認してください。つまり、pythonすべてがlib-dynload

関連情報