gpt4 book ai didi

visual-studio-2010 - VS2010升级后无法链接到lib(__cdecl vs __thiscall?)

转载 作者:行者123 更新时间:2023-12-04 18:12:19 24 4
gpt4 key购买 nike

非常感谢任何帮助,我的前额被擦伤了。

我们有一个大的开源 DICOM库 ( dcmtk ) 我们用作静态库。它是非托管的 C++,我们从托管的 C++ DLL 链接到它。包裹它。它使用 CMake 来调整各种平台的构建指令。移至 VS2010 (从 2008 年开始)破坏了我们的构建,因此我们也借此机会更新了我们正在使用的库版本(应该更友好 VS2010)。在对 lib 进行了一些修改之后,现在构建(给出或接受关于类型转换的无数警告)。但是现在使用它的代码不会链接到它。它引发了一堆 Unresolved external symbol 错误。

它发现库没问题(如果我更改了 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 使用任何其他约定来构建库。 (具有讽刺意味的是,执行 emit __thiscall 的旧 2008 版本似乎是使用/Gd 选项编译的,我认为是 forces __cdecl )。

有什么见解吗?

最佳答案

您可以看到名称 mangling 是不同的。使用 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 吗?

关于visual-studio-2010 - VS2010升级后无法链接到lib(__cdecl vs __thiscall?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12373667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com