依赖关系定义相同的类

问题描述

我正在使用定义类Exception的库cv_bridge(http://wiki.ros.org/cv_bridge)。该库取决于OpenCV库,该库还定义了Exception类。 Visual Studio 17无法生成:

Error   LNK2005 "public: __cdecl std::exception::exception(class std::exception const &)" (??0exception@std@@QEAA@AEBV01@@Z) already defined in cv_bridge.lib(cv_bridge.dll) my_project_name    C:\my_project_path\MSVCRTD.lib(throw_bad_alloc.obj) 

Error   LNK2005 "public: virtual char const * __cdecl std::exception::what(void)const " (?what@exception@std@@UEBAPEBDXZ) already defined in cv_bridge.lib(cv_bridge.dll) my_project_name   C:\my_project_path\MSVCRTD.lib(throw_bad_alloc.obj)

我需要链接OpenCV才能链接cv_bridge,但是我看不到如何解决这个多符号问题。

除了重新构建其中一个库之外,是否还有其他方法可以解决此问题?也许我可以配置一些VS17构建设置来处理此问题?

更多上下文:cv_bridge软件包是较大的ROS框架的一部分,我在Ubuntu的ROS框架中已多次使用它。现在,我试图在Windows中构建一个DLL,以从某些C#代码中调用。 ROS框架构建系统是否可以通过临时方式绕过此问题,而我只需要以某种方式在Windows中重现该问题?

解决方法

我不认为此问题引起了该类的相同定义,因为两个不同的异常类位于不同的命名空间中。

您可以尝试更改项目的配置,将库添加到“忽略特定库”。

“配置属性->链接器->忽略特定库”

添加“ msvcprtd.lib; MSVCRTD.lib”库。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...