おでこが傷だらけです。
静的ライブラリとして使用する大きなオープン ソース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)。
洞察はありますか?