1

MinGW コンパイラで DLL (MSVC を使用してコンパイルされたもの) を使用しようとしています。dll とバイナリの両方が、対応するコンパイラ (MSVC DLL の場合は MSVC、MinGW バイナリの場合は MinGW) でコンパイルされた opencv dll を使用します。ただし、opencv バージョンは同じ 2.42 です。

DLL を (extern C を使用して) 正常にロードできますが、DLL から SetRect 関数を呼び出すと、次のコンソール出力が表示されます。

Set search rect(qt): 162, 119, 50, 50
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
Set search rect(dll): 2282800, 2282908, 2282840, 1874777202
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)
(Internal error: pc 0x112 in read in psymtab, but not in symtab.)

数値が異なるのはなぜですか、内部エラーは何ですか、どうすれば解決できますか?

一部のコードでは、Rect クラスが Opencv から派生していることに注意してください。

MinGW バイナリ:

std::cout << "Rect(qt): " << rect.x << ", " << rect.y << ", " << rect.width << ", " << rect.height << "\n" << std::flush;
SetRect(rect);

MSVC DLL:

void SetRect(Rect rect)
{
    std::cout << ""Rect(dll): " << rect.x << ", " << rect.y << ", " << rect.width << ", " << rect.height << "\n" << std::flush;
}

ありがとう。

4

1 に答える 1

3

Short, Self Contained, Correct (Compilable), Exampleを提供しない限り、問題を再現することはできません。

MinGW FAQ、特に MSVC と MinGW DLL のセクションをよく読むことをお勧めます

于 2013-01-24T16:29:08.230 に答える