VS2010升级后无法链接到lib(__ cdecl vs __thiscall?)

时间:2012-09-11 15:57:12

标签: visual-studio-2010 visual-studio cdecl

任何帮助都非常感激,我的额头受伤了。

我们有一个大型开源DICOM库(dcmtk),我们将其用作静态库。它是非托管的C ++,我们从包装它的托管C++ DLL链接到它。它使用CMake来完成各种平台的构建指令。迁移到VS2010(从2008年开始)打破了我们的构建,因此我们借此机会更新了我们正在使用的库版本(应该更加VS2010友好)。现在构建了一些关于lib的解决方案(给出或接受关于类型转换的大量警告)。但是现在使用它的代码不会链接到它。它抛出了一堆未解决的外部符号错误。

它找到了库好的(如果我更改了lib文件名,它会在之前用适当的消息来解决)。

如果我用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不匹配的理论,但是还没有能够用任何其他约定来构建lib。 (具有讽刺意味的是旧的2008版本emit __thiscall,似乎是用/ Gd选项编译的,我认为是forces __cdecl)。

任何见解?

1 个答案:

答案 0 :(得分:4)

你可以看到名称错误不同。使用undname.exe可能有助于您的事业:

Undecoration of :- "??1OFString@@QEAA@XZ"
is :- "public: __cdecl OFString::~OFString(void) __ptr64"

Undecoration of :- "??1OFString@@QAE@XZ"
is :- "public: __thiscall OFString::~OFString(void)"

另外,你是在混合x64和x86吗?