OpenSSL
ここでは OpenSSL に発生した問題点の回避方法について記載しています
Visual Studio 2015で未解決が発生する
OpenSSL 1.0.2f Win32版を使用して
Visual Studio 2015でC++のプログラムを作成すると
error LNK2001: 外部シンボル "___iob_func" は未解決です。
が発生しました
原因は、e_os.hの 320ラインの下記の定義にあります。
# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin) # if _MSC_VER>=1300 && _MSC_VER<1600 # undef stdin # undef stdout # undef stderr FILE *__iob_func(); # define stdin (&__iob_func()[0]) # define stdout (&__iob_func()[1]) # define stderr (&__iob_func()[2])__iob_func()の定義は、Visual Studio 2015の場合には、
# define stdin (__acrt_iob_func(0)) # define stdout (__acrt_iob_func(1)) # define stderr (__acrt_iob_func(2))のようになりますが Visual Studio 2015の_MSC_VERは、1900ですので
このソースの場合には、ソースを修正する必要はありませんが、
Visual Studio 2015にてOpenSSL 1.0.2fをソース
( https://www.openssl.org/source/openssl-1.0.2f.tar.gz) からコンパイルし直す事で、
リンクエラーは無くなります。
Visual Studio 2013では、正常にリンク出来ます。
ビルドについて
OpenSSL 1.0.2o Win32版のスタテックライブラリィのビルド方法について
Visual Studio Professional 2015 の場合
開発者コマンドプロンプト for VS2015 を実行後OpenSSLサイト(https://www.openssl.org/source/)から openssl-1.0.2o.tar.gzをダウンロード後に解凍したフォルダに移動
Perlの実行環境を設定してあることを確認します
その後次のコマンドを入力すれば
perl Configure VC-WIN32 no-asm --prefix=C:\OpenSsl1.0.2o\Win32
call ms\do_ms
call ms\do_nt.bat
nmake -f ms\nt.mak install
実行終了後
C:\OpenSsl1.0.2o\Win32の中に生成されます
Visual Studio Professional 2017 の場合
開発者コマンドプロンプト for VS2017 を実行後はVisual Studio Professional 2015と全く同じ操作になります
OpenSSL 1.0.2r の場合
OpenSSL 1.0.2rのソース( https://www.openssl.org/source/openssl-1.0.2r.tar.gz) の場合は、Visual Studio 2015,2017共に上記の設定で正常にコンパイル出来ましたOpenSSL 1.1.1b の場合
OpenSSL 1.1.1bのソース( https://www.openssl.org/source/openssl-1.1.1b.tar.gz) の場合は、Visual Studio 2015,2017共に次のコマンドでコンパイル出来ました
perl Configure VC-WIN32 no-asm -static --prefix=C:\OpenSsl\Win32 --openssldir=SSL nmake nmake install
Visual Studio Professional 2019 の場合
Developer Command Prompt for VS 2019 を実行後はOpenSSL 1.0.2r
OpenSSL 1.1.1b 共に
Visual Studio Professional 2017と全く同じ操作になります