Visual c++ MSVC2013对ctor的调用约定感到困惑

Visual c++ MSVC2013对ctor的调用约定感到困惑,visual-c++,linker,static-libraries,Visual C++,Linker,Static Libraries,我已经使用/Gd编译了ns::Foo::Fooint一个静态库,并试图从另一个也使用/Gd编译的静态库中使用它 第一个库包含public:\uu thiscall ns::Foo::Foo(void)),这似乎是正确的,因为该库声明成员的调用约定是\uu stdcall 链接excutable时失败,因为第二个库中存在无法解决的外部forpublic:\uu cdecl ns::Foo::Foo(void)),尽管使用/Gd构建了所有内容。我也没有使用任何#pragma来更改调用约定 为什么MS

我已经使用
/Gd
编译了
ns::Foo::Foo
int一个静态库,并试图从另一个也使用
/Gd
编译的静态库中使用它

第一个库包含
public:\uu thiscall ns::Foo::Foo(void))
,这似乎是正确的,因为该库声明成员的调用约定是
\uu stdcall

链接excutable时失败,因为第二个库中存在无法解决的外部for
public:\uu cdecl ns::Foo::Foo(void))
,尽管使用
/Gd
构建了所有内容。我也没有使用任何
#pragma
来更改调用约定

为什么MSVC++在导入时无法使用调用约定,如何修复


64位版本,顺便说一句。

问题在于64位版本。此生成是从32位生成创建的,但MSVC在此过程中不会更改库依赖项。因此,链接器尝试将32位函数体链接到64位构建中。由于成员函数调用约定不同,第一个失败的检查是名称查找。链接器从未检查其输入是否全部为64位

修复方法是手动更新库依赖项;第一个库的64位构建包含正确的
ns::Foo::Foo