[英]C++ linker error when linking two object files from differen projects containing the same symbol
我有两个项目(ProjA和ProjB)。 在ProjA中,我创建TypeA.obj,其中包含TypeA的定义。 ProjB取决于ProjA。 在ProjB的Sth.obj中,我使用TypeA。
问题出现在ProjC的链接器阶段,该阶段链接TypeA.obj和Sth.obj。 我收到错误消息,说Sth.obj中已经定义了TypeA。
在c ++中是否可以链接多个obj文件,每个文件包含相同的符号(在本例中为TypeA符号)?
编辑!
好的,现在我将详细介绍。 首先,当我启动此线程时,即使我在使用c ++ / cx时遇到问题,也将自己的问题描述为与c ++有关。 我认为这是c ++和c ++ / cx的通用问题。 经过一些分析,我不再这么认为。 原谅我这个错误。
最可能我的问题仅与c ++ / cx有关。
下面,我向您提供有关Visual Studio中我的解决方案的更详细描述
ProjA
#####MyType.h#####
#pragma once
namespace N1
{
public ref class MyType sealed
{
};
}
#####MyType.cpp#####
#include "pch.h"
#include "MyType.h"
ProjB
#####MyTypeUser.h#####
namespace N2
{
[Windows::Foundation::Metadata::WebHostHidden]
public ref class MyTypeUser sealed
{
public:
void DoSth(N1::MyType){}
}
}
#####MyTypeUser.cpp#####
#include "pch.h"
#include "MyTypeUser.h"
ProjC
links MyType.obj and MyTypeUser.obj
在ProjC的链接器阶段,我得到以下错误:MyType已在MyType.obj或MyTypeUser中定义(取决于先链接的)。
您需要为这些项目创建名称空间,并使用这些名称空间来标识各个对象。 与我们使用std名称空间相同。
std::cout << "Hello World!" <<std::endl;
即使一个类定义相同,也不可能多次出现。 您将需要以其他方式设置项目。 可以将相同的类包装到不同的名称空间中,以避免冲突,但是这种情况会在以后导致非常痛苦的维护问题。 现在最好解决它。
为什么不创建一个与其余项目无关的另一个项目,该项目仅在多个位置包含您需要的类(或其他类型定义)?
您可能要在问题中添加另一个标签(例如Visual C ++?),以获得有关如何重构项目的更具体的帮助,具体取决于您的IDE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.