gpt4 book ai didi

c++ - LINK2019 : unresolved external symbol for a function returning shared_ptr

转载 作者:行者123 更新时间:2023-11-27 23:49:35 25 4
gpt4 key购买 nike

我正在使用一个 dll 导出一个返回 shared_ptr 的函数。

dll项目的代码:

#ifdef _WRAPPER
#define WRAPPER_DLL_EXT __declspec(dllexport)
#else
#define WRAPPER_DLL_EXT __declspec(dllimport)
#endif


std::shared_ptr<int> WRAPPER_DLL_EXT func()
{
return std::make_shared<int>(5);
}

使用dll的项目代码:

std::shared_ptr<int> myPointer = func();

我收到错误 LINK2019: unresolved external symbol for func()

dll项目是使用Visual Studio 2013 Toolset编译的,而使用dll的项目是使用Visual Studio 2010 Toolset

使用 VS2010 工具集编译 dll 可以防止错误,但我在实现中使用 VS2013 功能,所以我实际上无法使用 VS2010 编译 dll。请注意,我无法将使用项目升级到 VS2013。

对于使用 dll 的项目,如何使用 VS2013 工具集使其工作?

编辑:如果我将 shared_ptr 更改为 unique_ptr 它会起作用(但是,当然,这不是我需要的)。

最佳答案

简答:

为您的 dll 使用纯 C API 为 DLL 和可执行文件使用相同的工具集版本

长答案:

C++ 不是 ABI - 兼容不同的编译器版本。这意味着不同版本的工具集不会生成兼容的二进制文件。 C++ 名称可以被不同地破坏,内存布局不同等等——这将导致链接器无法找到正确的函数,或者一些可怕的运行时错误。确保东西与 ABI 兼容的唯一方法是使用一种保证在工具集版本之间是 ABI 稳定的语言,那就是 C。

这基本上就是为什么通过 DLL 公开的 Windows API 是具有普通 C 结构和内容的 C 函数的原因。

Some more info在 StackOverflow 上。

关于c++ - LINK2019 : unresolved external symbol for a function returning shared_ptr<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47432671/

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