微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

std::_String_alloc 析构函数链接器错误

如何解决std::_String_alloc 析构函数链接器错误

我有一个第三方静态库和两个 dll(比如,foo.dllbar.dll)。 bar.dllfoo.dll 链接bar.dll 显式实例化 std::basic_string 模板并继承 std::basic_string 类并将其导出。

我正在尝试将 static libfoo.dll 链接起来。但是在链接过程中,出现了与std::_String_alloc 析构函数相关的错误错误如下:

Error LNK2005 "public: __cdecl std::_String_alloc > >::~_String_alloc > >(void)" (??1?$_String_alloc@U?$_String_base_types@_WV?$allocator@_W@std@@@std@@@std@@QEAA@XZ) 已经定义在bar.lib(bar.dll)

为了解决上述链接错误(其中明确指出std::_String_alloc 析构函数有多个符号),我尝试声明显式实例化(extern 模板) 静态库中的em>如下:

extern template  std::_String_alloc< std::_String_base_types<wchar_t,class std::allocator<wchar_t> >>::~_String_alloc(void);

但是链接错误仍然存​​在,并且抛出了如下新错误

编译器生成函数“std::_String_alloc<_alloc_types>::~_String_alloc [with _Alloc_types=std::_String_base_types>]”无法显式实例化。

我的问题如下:

  1. 可以以及如何显式声明 std::_String_alloc 析构函数,以便可以抑制其隐式实例化(和符号)。

  2. 根据新生成错误,如果 std::_String_alloc 无法显式实例化,那么如何解决链接错误。我无法对 bar.dll 进行任何更改。 (由于符号已在 bar.dll 中定义,因此抛出错误

如果有人能对模板 std::_String_alloc 有所了解就太好了(它是 std::basic_string 的基类,没有太多信息出现在 Internet 上。)以及为它抛出的新错误编译器生成函数无法显式实例化。)

其他std::basic_string 成员函数包括std::basic_string 构造函数、析构函数和移动构造函数)存在链接错误。我通过在静态库(extern 模板)中显式声明这些成员函数解决这些问题。 Link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?