2012-03-14 28 views
6

静的なopenCV 2.3ライブラリを構築しました。私のプロジェクトは現在、問題のない動的なものを使用していますが、今は静的なライブラリを使いたいと思います。私はこれらのエラーを取得構築しようとした際LNK2005 Visual StudioとQT Creatorで静的openCVライブラリをリンクする際のエラー

INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include" 
INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include\opencv" 

LIBS += "C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_calib3d231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_contrib231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_core231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_features2d231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_flann231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_gpu231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_haartraining_engine.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_highgui231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_imgproc231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_legacy231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ml231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_objdetect231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ts231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_video231.lib" 

とのdirsのものがあります。私は私の.PROファイルへのlibsを追加感謝

LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" ([email protected]@YAXXZ) already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in MSVCRT.lib(MSVCR100.dll) 
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library 

すべてのヘルプや提案。

答えて

9

+2

+1。静的CRT(/ MT)でビルドされているように、あらかじめ構築されたWindows静的ライブラリのようです。プロジェクトでダイナミックCRT(/ MD)を使用している場合は、OpenCVを自分で再構築する必要があります。 –

+0

+1。悲しいが本当。 –

+0

OpenCV v3.1での動作確認済み – M2X

1

問題は、リンカーが異なる互換性のないバージョンのVisual C++ランタイムライブラリ(CRT)を1つのバイナリに結合しようとしているようです。
私は野生で推測させてください:あなたのプロジェクトの各部分とあなたがリンクしているライブラリはではありません。はVisual C++で同じコード生成オプションで生成されています。
/NODEFAULTLIBスイッチがこの問題を解決するのだろうか? BUILD_SHARED_LIBS私も未チェックBUILD_WITH_STATIC_CRTをオフ以外にも、OpenCVの静的ライブラリを構築し、それはその特定の問題の世話をしたとき

CMakeので
+0

これを行う別の解決策はありますか? openCVを特定のフラグで再構築するか、Qt Creatorのビルドオプションを変更しますか? OpenCVのライブラリを構築するために、cmakeで生成されたソリューションファイルをビルドしました。ビルド共有ライブラリのチェックボックスはチェックされていません。静的ライブラリの解決策を得るために必要なのは私の理解です。 Qt Creatorでは、これらのライブラリを読み込むのは簡単なことですか? – jzepeda

+0

テスト目的のみ:デバッグモードではなく、リリースモードでプロジェクトをコンパイルしようとしますか? – salomon

+0

私はずっとリリースしてきました。デバッグは私に "opencv_core231.lib(drawing.obj)のようなエラーを与えます: - 1:エラー:LNK2038: '_ITERATOR_DEBUG_LEVEL'の不一致が検出されました:値 '0'は値 '2' main.obj"と一致しません。 QTが静的にリンクされていないように見えるので、私はオプションを再び有効にしなければならないと思うが、以下の解決策は私のために修正した: – jzepeda

5

がいることを確認し、そのプロジェクトのプロパティ - >構成プロパティ - > C/C++>コード生成:ランタイムライブラリはマルチスレッド(/ MT)

+0

デバッグビルド用thisまたは/ MTd – sastanin

関連する問題