开发的库使用了boost库,然后出现如下错误:

libboost_system-vc141-mt-gd-x64-1_68.lib(error_code.obj) : error LNK2005: "class boost::system::error_category const & __cdecl boost::system::detail::generic_category_ncx(void)" (?generic_category_ncx@detail@system@boost@@YAAEBVerror_category@23@XZ) 已经在 boost_system-vc141-mt-gd-x64-1_68.lib(boost_system-vc141-mt-gd-x64-1_68.dll) 中定义
libboost_filesystem-vc141-mt-gd-x64-1_68.lib(path_traits.obj) : error LNK2005: "void __cdecl boost::filesystem::path_traits::convert(char const *,char const *,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > &,class std::codecvt<wchar_t,char,struct _Mbstatet> const &)" (?convert@path_traits@filesystem@boost@@YAXPEBD0AEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEBV?$codecvt@_WDU_Mbstatet@@@5@@Z) 已经在 boost_filesystem-vc141-mt-gd-x64-1_68.lib(boost_filesystem-vc141-mt-gd-x64-1_68.dll) 中定义
libboost_filesystem-vc141-mt-gd-x64-1_68.lib(operations.obj) : error LNK2005: "class boost::filesystem::file_status __cdecl boost::filesystem::detail::status(class boost::filesystem::path const &,class boost::system::error_code *)" (?status@detail@filesystem@boost@@YA?AVfile_status@23@AEBVpath@23@PEAVerror_code@system@3@@Z) 已经在 boost_filesystem-vc141-mt-gd-x64-1_68.lib(boost_filesystem-vc141-mt-gd-x64-1_68.dll) 中定义
libboost_filesystem-vc141-mt-gd-x64-1_68.lib(operations.obj) : error LNK2005: "bool __cdecl boost::filesystem::detail::create_directories(class boost::filesystem::path const &,class boost::system::error_code *)" (?create_directories@detail@filesystem@boost@@YA_NAEBVpath@23@PEAVerror_code@system@3@@Z) 已经在 boost_filesystem-vc141-mt-gd-x64-1_68.lib(boost_filesystem-vc141-mt-gd-x64-1_68.dll) 中定义
libboost_filesystem-vc141-mt-gd-x64-1_68.lib(path.obj) : error LNK2005: "public: static class std::codecvt<wchar_t,char,struct _Mbstatet> const & __cdecl boost::filesystem::path::codecvt(void)" (?codecvt@path@filesystem@boost@@SAAEBV?$codecvt@_WDU_Mbstatet@@@std@@XZ) 已经在 boost_filesystem-vc141-mt-gd-x64-1_68.lib(boost_filesystem-vc141-mt-gd-x64-1_68.dll) 中定义
libboost_thread-vc141-mt-gd-x64-1_68.lib(thread.obj) : error LNK2005: "void __cdecl boost::detail::set_tss_data(void const *,class boost::shared_ptr<struct boost::detail::tss_cleanup_function>,void *,bool)" (?set_tss_data@detail@boost@@YAXPEBXV?$shared_ptr@Utss_cleanup_function@detail@boost@@@2@PEAX_N@Z) 已经在 boost_thread-vc141-mt-gd-x64-1_68.lib(boost_thread-vc141-mt-gd-x64-1_68.dll) 中定义
libboost_thread-vc141-mt-gd-x64-1_68.lib(thread.obj) : error LNK2005: "void * __cdecl boost::detail::get_tss_data(void const *)" (?get_tss_data@detail@boost@@YAPEAXPEBX@Z) 已经在 boost_thread-vc141-mt-gd-x64-1_68.lib(boost_thread-vc141-mt-gd-x64-1_68.dll) 中定义

明显错误不在我的代码是,出错的全部都是模板类,换句话说:

  • 自己的代码里,这个模板类实例化一次,
  • 在已经编译好的boost库(如libboost_filesystem-vc141-mt-gd-x64-1_68.lib)已经实例化一次了

一个模板类实例化两次,所以错了

上网google了好久,找到一个提示,可能是混了static/dynamic,但我编译时全是dynamic
然后查看FindBoost.cmake,发现其中有Boost::dynamic_linking变量,而这个变量只是添加一个宏定义BOOST_ALL_DYN_LINK

抱着试试的态度,在cmake脚本中添加了

add_definitions(-DBOOST_ALL_DYN_LINK)

编译成功,不提示LNK2005

boost LNK2005 重定义错误相关推荐

  1. C语言中重定义 错误

    假设有三个文件 node.h //定义节点 list.h //对链表的操作函数 test.c //测试函数 包含关系如下: list.h中 #include "node.h" te ...

  2. c语言错误重定义,C语言的重定义错误求解

    追问 那如果要用到全局变量,要把它写在C文件中? 那全局变量的主要作用其实就是跨文件作用域来传递一些东西,写在C文件中,不太好在别的文件中引用吧. 用的时候写extern进去? 感觉全局变量在C里用 ...

  3. 配置linux内核错误,配置Linux内核(menuconfig):重定义错误

    我有Linux内核3.8.0源代码,当尝试使用 menuconfig 选项(使用"make menuconfig" terminal命令)配置它时,我得到以下错误列表: DALEK ...

  4. inline函数不报重定义错误浅析

    1 问题背景 关键字inline用于建议编译器在调用处展开被修饰的函数,但最终是否展开取决于编译器的行为 gcc配置参数-O0时不会进行编译优化,inline关键字不生效 gcc配置参数-O2时会进行 ...

  5. 使用gsoap导致重定义错误解决办法--warning C4005: 'AF_IPX' : macro redefinition

    错误信息: C:\Program Files (x86)\Windows Kits\8.1\Include\shared\ws2def.h(96): warning C4005: 'AF_IPX' : ...

  6. sockaddr类型重定义

    这时说的sockaddr类型重定义错误, 实际上包括一大堆: sockaddr, ;sockaddr_in等等. 这是由于windows.h和winsock2.h包含的顺序而造成的错误: 正确的顺序是 ...

  7. VS2010 error C299: “Font”:“struct”类型重定义

    在VS2010里添加了在VC6.0里形成的OFFICE库文件的类 excel9.h,excel9.cpp,就是我在VC6里做操作OFFICE的表格时候添加的库文件,然后把它们( excel9.h,ex ...

  8. error C2011: “Font”:“struct”类型重定义

    error C2011: "Font":"struct"类型重定义 在VS2008里添加在VC6.0里形成的OFFICE库文件的类 excel.h.excel. ...

  9. C++中重定义,重载,重写

    重定义 C++中的重定义指在同一作用域内定义了同名的函数.变量或类型.重定义是编译器无法处理的语法错误,将导致程序无法编译通过. 例如,在同一作用域内定义了两个函数名相同.参数列表相同的函数,就会产生 ...

  10. 【错误】 y1重定义,以前的定义是“函数”

    今天敲代码发现这个错误,找半天也没发现到底是哪里重定义了, 把错误列表往上拉了一下,才发现- 我是个憨憨,原来这个y1在math.h里定义过了.有点神奇,居然写了个这么常用的命名方式做它的函数名. 继 ...

最新文章

  1. 用cookie实现保存密码
  2. Hyperopt中文文档导读
  3. linux case if for语法
  4. 穿皮裤放屁,裤子会鼓吗?真相看这里!
  5. 新来的同事把公司现有项目的性能优化了一遍,来看看他是怎么做到的
  6. Junit下获取src/test/resource路径
  7. 主键和外键举例_数据库-主键和外键及其约束
  8. UniWebView笔记
  9. silverlight文件下载方法
  10. mysql 分页查询数据重复出现
  11. 佛系前端面试题记录--第一周
  12. react 父子 --- 子父 通讯
  13. 对于上海交通大学网络安全专业21考研823的一些总结以及22考研专业课如何准备的想法
  14. win10桌面计算机图标隐藏,win10系统隐藏桌面单个图标的恢复方法
  15. 天翼云铸牢国云安全,护航千行百业
  16. 2009 year English Inprovement for IT developments
  17. Postman教程-Pre-request Script和Tests脚本进阶
  18. 百度语音识别注册流程
  19. 祛湿不能迷信红豆薏米水!
  20. floor()函数的使用

热门文章

  1. Java打印输出print和prinntln
  2. 老司机用CATIA的实用默认值更改
  3. js链接oracle数据库语法,js连接oracle数据库
  4. java实现lda模型_lda模型 java
  5. 关于CMOS摄像头的DVP接口的工作方式与一般使用方法
  6. 【Unity】Unity3D RPG游戏制作实例(二)开发思路及概要设计
  7. 使用wininet的InternetReadFile下载文件
  8. Mysql监控工具小集合
  9. 经典算法书籍推荐(亲测有效)
  10. 物联网服务器搭建资料汇总