【问题标题】:Two files of the same name give linker error in Visual Studio两个同名文件在 Visual Studio 中给出链接器错误
【发布时间】:2012-03-10 04:53:01
【问题描述】:

我正在使用 Visual Studio 2010 来编译我的 C++ 项目,并且链接器在我的两个同名文件上出现问题 - 但它们位于完全不同的目录中。如何让链接器识别它们是不同的文件?

【问题讨论】:

  • 请告诉我们确切的细节,原因可能是不是它们具有相同名称的事实,而是例如它们具有相同名称的函数或类似的。
  • 这里没有任何信息,甚至没有错误信息是什么。任何人都可以做的就是猜测问题,这是浪费时间。
  • 右键单击文件之一,属性、C/C++、输出文件,将对象文件名更改为,例如,$(IntDir)\$(InputName)2
  • 为了记录,“重复”问题是在此问题六个月后提出的,因此是重复的。

标签: c++ visual-studio-2010


【解决方案1】:

在“对象文件名”属性中使用$(IntDir)%(RelativeDir)

(配置属性 -> C/C++ -> 输出文件 -> 对象文件名)

  • 项目,或
  • .cpp 文件。

这是来自相关问题VisualStudio project with multiple sourcefiles of the same name?的答案。

【讨论】:

  • 天哪,这个错误让我损失了 2 个小时,直到我意识到 .obj 文件被覆盖(大解决方案,我检查了很多东西)。这是问题的真正解决方案。谢谢!很难相信这还不是默认配置。
【解决方案2】:

我相信问题出在这样一个事实,即所有 .obj 文件都写入同一个文件夹,因此编译这两个源文件的输出发生冲突。我认为至少有两种可能的解决方案:

  1. 为每个输入文件夹使用不同的输出目录(构建目录)
  2. 为每个(或仅一个)源文件创建自定义对象文件名

我不确定第一个选项,但是对于第二个,您应该能够在解决方案资源管理器中右键单击源文件,选择“属性”,然后找到一些配置设置以覆盖输出(.obj) 为该源文件创建的文件。

【讨论】:

  • 是的,就是这样。它们都以文件名作为 obj 名称写入同一个文件夹,即使它们来自不同的目录。一个非常愚蠢的设计,IMO。但是,重新配置两者之一的输出名称可以解决问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 2013-12-27
  • 2010-12-13
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多