2019年10月17日木曜日

VisualStudoでコンパイル時にVisual C++ランタイムを静的リンクする方法

■前提条件
・Visual Studio C++環境

■手順
※Visual Studioのバージョンが異なっても同じはず。自分はVisual Studio Pro 2008 C++で確認した。

1.VisualStudoを起動する
2.[メニュー」→「プロジェクト」→「xxxx のプロパティ」
  →xxxx のプロパティページ ダイアログが表示する
.[構成プロパティ]→「C/C++」→[コード生成]→[ランタイムライブラリ]
  →「マルチスレッド DLL (/MD)」に変更する。

■静的リンク
「マルチスレッド (/MT)」
「マルチスレッド デバッグ (/MTd)」

■動的リンク
「マルチスレッド DLL (/MD)」
「マルチスレッド デバッグ DLL (/MDd)」

Release版
「マルチスレッド (/MT)」
「マルチスレッド DLL (/MD)」

Debug版
「マルチスレッド デバッグ (/MTd)」
「マルチスレッド デバッグ DLL (/MDd)」


参考サイト
動的リンクと静的リンクについて
https://ohwhsmm7.blog.fc2.com/blog-entry-78.html

2019年10月16日水曜日

OpenSSL1.1.1c(TLS.1.3対応版)のビルド(VisualStudio 2019版)

【ビルド環境】
Visual Studio Pro 2019

【準備】
1)Perlインストール
1-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads

1-2)コマンドプロンプト上でバージョン確認。
perl --version

2)NASMインストール
2-1)NASMをインストールする。
link:http://www.nasm.us/

2-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。

2-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。

2-4)コマンドプロンプト上でバージョン確認。
nasm --version

3)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source

3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c

3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86

【ビルド手順】
1) スタートメニューから「x64_x86 Cross Tools Command Prompt for VS 2019」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c

3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
→Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。

蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"

"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。

4) nmake installを実行する。

参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/

生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html

Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html