由std::string继承引起的LNK 2005错误
来源:互联网 发布:如何查询淘宝旺旺号 编辑:程序博客网 时间:2024/06/05 05:29
最近在用VS2012构建项目时,发现在编译DLL或EXE的链接阶段,会提示LNK2005错误:
error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in xyz.obj
经过排查,确保没有重复类型定义,并且运行库格式一致(都为/MTd或/MDd),没有时间仔细考虑这个问题,只是通过加一个/force选项勉强通过编译。
今天在网上搜索,发现其他人也遇到过类似问题,原因是由于导入的动态链接库中,定义了从std::string派生的类。参见:http://social.msdn.microsoft.com/Forums/vstudio/en-US/9ec13f84-0396-4078-be2c-2448dc4eef8b/lnk-2005-error-with-dll-in-msvc-10-class-derived-from-stdstring?forum=vcgeneral
而我们的引用的库中,也确实有一个从std::basic_string<>派生的类。
对于这一问题,微软工程师给出的建议是,将继承改为组合,却没有说明引发链接错误的根本原因。
按照上面的建议,将那个类改为组合basic_string实现,果然问题消失了。
- 由std::string继承引起的LNK 2005错误
- 一个Lnk 2005的错误
- std::string引用计数引起的问题
- MFC LNK 2005错误
- 由字符集编码引起的错误
- 由Numeric引起的错误解决方法
- 由myeclipse验证引起的错误解决方法
- 由编译警告引起的程序错误
- 由DRM引起的ORA-00481错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 由中间件连接引起的ora-01940错误的解决
- 由字符集设置引起的MySQL插入数据错误
- IOS 由File's owner引起的连接错误
- Java RMI之HelloWorld篇
- 在sqlplus里用sys用户登录oracle
- sql 截取
- android 中数据库 用SQLiteOpenHelper建立后就不会再oncreat
- 数据分析资源汇总(持续更新中)
- 由std::string继承引起的LNK 2005错误
- Reverse bits of an unsigned integer
- 将数组中所有小于或等于0的元素都放在数组前面,大于0的元素放在数组后面
- asp.net @ 指令
- jw player学习笔记----跨域请求
- powerfull makefile
- JSON静态分页
- Memory Translation and Segmentation
- mysql 添加、删除、修改字段