非常感谢任何帮助,我的前额被擦伤了。
我们有一个大的开源DICOM
库 ( dcmtk
),我们将其用作静态库。它是非托管 C++,我们从C++ DLL
包装它的托管链接到它。它使用 CMake 来调整各种平台的构建指令。迁移到VS2010
(从 2008 年开始)破坏了我们的构建,因此我们也借此机会更新了我们正在使用的库版本(应该更VS2010
友好)。在对 lib 进行了一些修改之后,现在构建(给出或接受关于类型转换的无数警告)。但是现在使用它的代码不会链接到它。它引发了一堆未解决的外部符号错误。
它找到了库 OK(如果我更改了 lib 文件名,它会在前面使用适当的 msg 时出错)。
如果我使用 DUMPBIN 反汇编 lib 文件,我会看到相应的标记,例如:... 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
)。
有什么见解吗?