OPENSSL_LIBS="-llibeay32 -lssleay32"...
(および、および) は-l
完全に避けてください。リンカーは、静的リンクの要求を無視する場合があり (Apple)、スクリプトがそれを変更する場合もあります (カスタム ビルド スクリプトがどれだけ私を苦しめたかはわかりません)。-L
-Wl,-Bstatic
代わりに、オブジェクト ファイルを使用する場合と同様に、完全に指定されたアーカイブを使用してください。以下をLDLIBS
追加することで、スクリプトが失敗したり、リンカーがリクエストを無視したりする可能性がなくなります。
/usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a
明らかに、インストールに合わせてlibssl.a
とのパスを変更する必要があります。libcrypto.a
がない場合は、(または IDE の「その他のリンカー フラグ」) にLDLIBS
追加します。LDFLAGS
QMAKE_LFLAGS
Qt では、 orのように見えますLIBS
。または、この投稿を試すこともできます: How to add "Additional Dependencies" (Linker settings) .
同じトリックが共有オブジェクトにも適用されます (ただし、リンカーは共有オブジェクトを優先するため、通常は問題になりません)。つまり、次を指定できます。
/usr/local/ssl/lib/libssl.so /usr/local/ssl/lib/libcrypto.so
上記のように共有オブジェクトを指定する際に覚えておくべきことrpath
は、実行時リンカーが確実にメッセージを受け取るように を指定する必要があるということです。つまり、LDFLAGS
「その他のリンカー オプション」に以下を追加する必要があります。
-Wl,-rpath=/usr/local/ssl/lib
にある OpenSSL FIPS Capable Library を使用するときに共有オブジェクトを指定するときに、いくつか噛まれまし/usr/local/ssl/lib
た。OpenSSL FIPS Capable Library は、必要なものです。/usr/lib
/usr/lib64
FIPS_mode_set
静的アーカイブだけを残して、その場所から共有オブジェクトを削除 (または名前変更) することもできます。Xcode for iPhone でビルドするときは、過去にこの手法を使用する必要がありました。適切に配置された .xml があっても、Xcode は静的アーカイブの使用を拒否しました-Bstatic
。(クロス コンパイラと変更されたツールチェーンは、使用するのが最悪の場合があります)。インストール ディレクトリを変更する必要はないと思うので、通常はこの手法を使用しません。
要約すると、 、 、 、および を避け-l
て-L
ください-Wl,-Bstatic
。必要なものを完全に指定し、完全修飾ライブラリ パス名を使用して、それらをオブジェクト ファイルのように使用します。rpath
共有オブジェクトを指定する場合はan を使用します。