【问题标题】:MSVC2013 gets confused over calling convention of ctorMSVC2013 对 ctor 的调用约定感到困惑
【发布时间】:2014-10-07 10:53:27
【问题描述】:

我已经使用/Gdns::Foo::Foo 编译成一个静态库,并尝试从另一个同样使用/Gd 编译的静态库中使用它。

第一个库包含public: __thiscall ns::Foo::Foo(void)),这似乎是正确的,因为the documentation for /Gd 声明成员的调用约定是__stdcall

链接可执行文件时,它会失败,因为尽管使用/Gd 构建了所有内容,但第二个库中的public: __cdecl ns::Foo::Foo(void)) 存在不可解析的外部。我也没有使用任何#pragma 来更改调用约定。

为什么 MSVC++ 无法在导入时使用 __stdcall 调用约定,我该如何解决?

64 位构建,顺便说一句。

【问题讨论】:

    标签: visual-c++ linker static-libraries


    【解决方案1】:

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

    修复是手动更新库依赖;第一个库的 64 位版本确实包含正确的 ns::Foo::Foo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2020-10-17
      • 2017-03-22
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多