おでこが傷だらけです。
静的ライブラリとして使用する大きなオープン ソースDICOM
ライブラリ ( ) があります。dcmtk
これはアンマネージド C++ であり、それC++ DLL
をラップするマネージドからリンクしています。CMake を使用して、さまざまなプラットフォームのビルド手順を修正します。(2008 年から)への移行によりVS2010
ビルドが壊れたため、使用しているライブラリのバージョンも更新する機会を得ました (より使いやすいはずですVS2010
)。ライブラリをいじった後、ビルドが行われます(型変換に関する無数の警告を出したり受け取ったりします)。しかし、それを使用するコードはリンクしません。未解決の外部シンボル エラーが多数スローされます。
ライブラリに問題はありません(libファイル名を変更すると、適切なメッセージで以前に失敗します)。
ライブラリ ファイルを DUMPBIN で逆アセンブルすると、適切なトークンが表示されます。例: … 000000000000000E: C3 ret
??1OFString@@QEAA@XZ (public: __cdecl OFString::~OFString(void))
:
0000000000000000: 40 53 push rbx…
しかし、リンカはそれを見つけられません:
error LNK2001: unresolved external symbol "public: __thiscall OFString::~OFString(void)" (??1OFString@@QAE@XZ)
私はそれが__cdecl vs. __thiscall
不一致であるという理論に取り組んできましたが、VSに他の規則でライブラリを構築させることができませんでした。(皮肉なことに、古い 2008 バージョンはemit __thiscall
、私が考えた /Gd オプションでコンパイルされているようですforces __cdecl
)。
洞察はありますか?