of_v0.10.1_vs2017_release ターゲットRelease/x64でのやりかた
1
- アプリケーションプロジェクトのプロパティ
- openframeworksLibのプロパティ
にて、C/C++ -> コード生成 -> ランタイムライブラリ を/MTにする。
2
https://www.dropbox.com/sh/oakofuoccawtvfd/AADD2W7uncOTtrF0K1Hvg7Xja?dl=0
から
libboost_static_libs_for_of_v0.10.1_vs2017_release_libs_boost_lib_vs_x64.zip
をダウンロードし、中身の4ファイルを
of_v0.10.1_vs2017_release\libs\boost\lib\vs\x64
に配置する。
説明
WindowsのopenFrameworksof_v0.10.1_vs2017_releaseでアプリケーションをRelease/x64でビルドし、アプリケーションの.exeファイル入りbinフォルダーを配布する際、配布した先でVisual Studioをインストールしてないと、MSVCP140D.dllがないといわれて実行できません。Visual Studioのランタイムを別途インストールすればよいのですが、インストールしなくても動いてほしい。
のびっこさんの解説、
[Visual C++で作成したEXEを、ランタイムDLL無しに単体で起動できるようにするには]
(https://qiita.com/nobikko/items/370378b303e129706fd6)
にある通り、プロジェクトのプロパティにて、
C/C++ -> コード生成 -> ランタイムライブラリ を/MTにする
ことで解決。。
するかと思いましたが、openframeworksLibプロジェクトも同じ設定をする必要があります。
しかしlibboost_filesystem-vc141-mt-s-1_64.dllがないよ、とリンクエラーが出ます。
スタティックリンク用のboostのdllがof_v0.10.1_vs2017_releaseに入ってないことが原因です。
sourceforgeにあるboostをビルドしたバイナリを入手します。
にある、boost_1_64_0-msvc-14.1-64.exe
をダウンロードして、中に入ってる以下の4ファイルを見つけます。
libboost_filesystem-vc141-mt-s-1_64.dlllibboost_filesystem-vc141-mt-sgd-1_64.dlllibboost_system-vc141-mt-s-1_64.dlllibboost_system-vc141-mt-sgd-1_64.dll
上記ファイルをof_v0.10.1_vs2017_release\libs\boost\lib\vs\x64フォルダに配置すると、リンクエラーが出なくなります。
sourceforgeのファイルはいろいろ入ってて大きいので、必要な上記の4ファイルだけ以下にまとめておきました。
https://www.dropbox.com/sh/oakofuoccawtvfd/AADD2W7uncOTtrF0K1Hvg7Xja?dl=0
なおopenframeworksLibプロジェクトのランタイムライブラリを/MTにすると、アプリケーションプロジェクトも全部/MTにしないとリンクできなくなりますので、配布用ビルドの用が済んだら/MDにもどしとくのがいいかと。
参考
oF forumの参考スレ Static linking not building needed Boost version in VS 2017?