21

opencv 動的ライブラリを使用する Visual Studio 2012 のプロジェクトがあります。コンパイル、リンク、およびうまく機能しました。

動的ライブラリの代わりに静的ライブラリを使用するようにプロジェクトを変更したいと考えています。

プロジェクト VC++ ディレクトリのライブラリ ディレクトリを から変更しました

  C:\thirdparty\opencv\build\x86\vc11\lib

宛先: C:\thirdparty\opencv\build\x86\vc11\staticlib

しかし、プロジェクトをビルドしようとすると、次のような多くのリンカー エラーが発生します。

 Error  110 error LNK2001: unresolved external symbol _TIFFWriteScanline    myproject\opencv_highgui245.lib(grfmt_tiff.obj) 

さらに重要なことに、次のような多くのエラーが発生します。

 Error  1   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in myproject.obj    myproject\opencv_core245.lib(system.obj)    

動的ライブラリを使用するプロジェクトを静的ライブラリを使用するように変換するには、他にどのような変更を行う必要がありますか?

編集 1

/md を /mt に変更し、いくつかの新しいライブラリを入力ライブラリのリストに追加した後:

opencv_calib3d245.lib
opencv_contrib245.lib
opencv_core245.lib
opencv_features2d245.lib
opencv_flann245.lib
libtiff.lib
libpng.lib
libjpeg.lib
libjasper.lib
IlmImf.lib
zlib.lib
opencv_gpu245.lib
opencv_haartraining_engine.lib
opencv_highgui245.lib
opencv_imgproc245.lib
opencv_legacy245.lib
opencv_ml245.lib
opencv_nonfree245.lib
opencv_objdetect245.lib
opencv_photo245.lib
opencv_stitching245.lib
opencv_ts245.lib
opencv_video245.lib
opencv_videostab245.lib

いくつかの新しいエラーが発生しています:

Error   9   error LNK2001: unresolved external symbol _AVIFileCreateStreamA@12  myproject\opencv_highgui245.lib(cap_vfw.obj)    
Error   8   error LNK2001: unresolved external symbol _AVIFileGetStream@16  myproject\opencv_highgui245.lib(cap_vfw.obj)    
Error   5   error LNK2001: unresolved external symbol _AVIFileInit@0    myproject\opencv_highgui245.lib(cap_vfw.obj)    
Error   7   error LNK2001: unresolved external symbol _AVIFileOpenA@16  myproject\opencv_highgui245.lib(cap_vfw.obj)    

どうやらいくつかのライブラリが不足しているようですが、どれですか?

編集 2 リストにライブラリを追加する必要があります。ライブラリの完全なリストは次のとおりです。

opencv_calib3d245.lib
opencv_contrib245.lib
opencv_core245.lib
opencv_features2d245.lib
opencv_flann245.lib
libtiff.lib
libpng.lib
libjpeg.lib
libjasper.lib
IlmImf.lib
zlib.lib
opencv_gpu245.lib
opencv_haartraining_engine.lib
opencv_highgui245.lib
opencv_imgproc245.lib
opencv_legacy245.lib
opencv_ml245.lib
opencv_nonfree245.lib
opencv_objdetect245.lib
opencv_photo245.lib
opencv_stitching245.lib
opencv_ts245.lib
opencv_video245.lib
opencv_videostab245.lib
Vfw32.Lib
comctl32.lib

これで問題は解決しました。

4

5 に答える 5

11

プロジェクトのランタイム ライブラリを /MTd に変更することで、VS 2013 で静的ライブラリを動作させることができます。

ここに画像の説明を入力

次に、これらのリンカー >> 入力 >> 追加の依存関係を含めます。

opencv_core248d.lib
opencv_imgproc248d.lib
opencv_highgui248d.lib
opencv_ml248d.lib
opencv_video248d.lib
opencv_features2d248d.lib
opencv_calib3d248d.lib
opencv_objdetect248d.lib
opencv_contrib248d.lib
opencv_legacy248d.lib
opencv_flann248d.lib
libpngd.lib
libtiffd.lib
zlibd.lib
IlmImfd.lib
libjasperd.lib
libjpegd.lib
comctl32.lib
gdi32.lib
vfw32.lib
于 2014-02-21T22:58:16.543 に答える
9

CMake を使用してビルドする場合は、OpenCV CMake オプションの 1 つであるため、非常に簡単です。BUILD_WITH_STATIC_CRT をオフに設定するだけです。例えば。CMake コマンドラインで

-DBUILD_WITH_STATIC_CRT=OFF
于 2015-10-26T01:45:52.307 に答える