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では、正常にリンク出来ます。

〒160-0004 東京都新宿区四谷2-8 クローバビル 804 ピイジェイ
Mail: freeinfo@pjc.co.jp