2

全体として、64ビットのVisual Studio 2010 Professionalを使用してコンパイルしたopencvライブラリにopencvテストプログラムをリンクしようとしています。エラーの例は次のとおりです。

1>webcamtest.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::isOpened(void)const " (?isOpened@VideoCapture@cv@@UBE_NXZ)

問題は、リンクされているopencv_highui249.dllが含まれている場合、__thiscallの理由です

Symbol name  : ?isOpened@VideoWriter@cv@@UEBA_NXZ (public: virtual bool __cdecl cv::VideoWriter::isOpened(void)const )

__cdecl は理にかなっています。これは、ライブラリが正しく構築されていることを示しています。テスト プログラムをリンクすると、opencv_highui249.dll が検索されているため、ビルド フラグは正しいように見えますが、どうやら何かが足りないのでしょうか?

4

3 に答える 3

1

x64 ライブラリを使用したことは確かですか?
Microsoft は、x64 の呼び出し規約を縮小しました。ここを参照してください。基本的にすべてが今__fastcallです。
コンパイラは引き続き使用できます__thiscallが、無視されます ( MSDN リンク)。したがって、テスト プログラムは問題ありませんが、ライブラリが間違っているように見えます。

于 2012-08-13T14:32:01.303 に答える
0

__thiscallクラスのメンバー関数の VS での既定の呼び出し規約です。おそらく、ヘッダー ファイルに__cdecl指定子がないか、コンパイル フラグが正しく設定されていないため、関連する #define が設定されていません。

于 2012-08-13T14:19:02.147 に答える
0

__thiscallは MSVC のクラス メンバー関数のデフォルトです。同じ設定で OpenCV をコンパイルするか__cdecl、ヘッダー定義で明示的に使用する必要があります。

于 2012-08-13T14:19:38.207 に答える