Visual Studio 2010 的奇怪“警告 LNK4042”

新手上路,请多包涵

我刚刚被来自 Visual Studio 2010 (C++) 的一些重要警告打得头破血流。

编译给出了以下输出:

1 Debug\is.obj : 警告 LNK4042:对象指定了不止一次;额外被忽略

1 Debug\make.obj:警告 LNK4042:对象指定了多次;额外被忽略

1 Debug\view.obj:警告LNK4042:对象指定了不止一次;额外被忽略

1 identity.obj:错误LNK2019:无法解析的外部符号 void __cdecl test::identity::view(void) (?view@identity@test@@YAXXZ)在函数 void __cdecl test::identity::identity(void) (?identity@0test@@YAXXZ)中引用

1 identity.obj:错误LNK2019:无法解析的外部符号 void __cdecl test::identity::make(void) (?make@identity@test@@YAXXZ)在函数 void __cdecl test::identity::identity(void) (?identity@0test@@YAXXZ)中引用

1 range.obj:错误LNK2019:无法解析的外部符号 void __cdecl test::range::is(void) (?is@range@test@@YAXXZ)在函数 void __cdecl test::range::range(void) (?range@0test@@YAXXZ)中引用

链接器错误总是很难调试……但是有未解决的引用,所以我检查了……但源代码格式正确……最后它击中了我:

我的文件夹层次结构如下所示:

 src/
  identity/
    is.cpp
    make.cpp
    view.cpp
  range/
    is.cpp
    make.cpp
    view.cpp

解决方案中的层次结构也是如此(我总是将其设置为模仿“真实”文件夹结构)。

诊断输出:

 Debug\is.obj
Debug\make.obj
Debug\view.obj

伴随着一条警告说 .obj 已被传递给链接器两次,并且将被忽略。

不再搜索:Visual 已经整齐地展平了我的文件夹层次结构,因此无法整齐地编译源代码。

目前,我只是想重命名文件,这应该涵盖这个问题……

…但是有没有办法让 Visual Studio 不展平文件层次结构?

原文由 Matthieu M. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 813
2 个回答

只是想交叉发布我认为的答案,如果您打开整个项目的属性,并将 C/C++ -> Output Files -> "Object File Name" 下的值更改为以下内容:

$(IntDir)/%(RelativeDir)/

在 VS 2010 下,我相信这将消除所有对象文件的歧义(因为我相信 Windows 在任何疯狂的情况下都不会让你在同一个目录中有两个同名的文件)。另请在 此处 查看详细信息。

原文由 M. Tibbits 发布,翻译遵循 CC BY-SA 3.0 许可协议

我解决了它在我的项目中更改文件名。有两个文件名为 main.c 和 main.cpp。我改变了其中一个并开始工作。

原文由 Halük Uzuner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏