问题标签 [lnk2005]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1111 浏览

c++ - 包括不工作的警卫?(已在 y.obj 中定义了 500 个 LNK2005 x 类型的错误)

我有一个大项目(400 个文件),所有标题都包含警卫和所有内容,但是我收到 500 LNK2005 错误。

可能是我在某些标头中定义了函数体吗?因为我在 DirectX 实用程序标头中看到了相同的内容(DirectXCollision 的某些功能完全在标头中)。

或者可能是因为他们使用的是 .inl 文件而不是 .cpp?

0 投票
3 回答
3031 浏览

c++ - 命名空间和包含生成链接错误

当我遇到 lnk2005 错误时,我正在使用命名空间。我不知道如何解决这个错误。这是错误:

这是代码...

图表.h

Foo.h

图表.cpp

源.cpp

当 Source.cpp 中的 #include "Chart.h" 被删除时,问题就消失了。但是,Source.cpp 需要 #include "Chart.h" 来定义命名空间。

在 Chart.cpp 和 Source.cpp 中表达“命名空间图表”的正确方法是什么,以便一切都能编译?

0 投票
0 回答
191 浏览

visual-studio-2010 - 尽管匹配运行时库 (/MD),但 LNK2005 错误

我正在尝试在 VS2010 下在包含 C# 和 C++ 项目的 CLI/C++ 解决方案中使用OFELI库。简而言之,UI 是用 WPF 编写的,并且计算是在支持 CLR 的 C++ 中完成的。

我下载了OFELI源,将解决方案转换为VS2010格式,并能够成功构建静态库。但是,在链接到 lib (ofeli-debug.lib) 时会导致大量 LNK2005 错误;

我注意确保 lib 是使用 /MDd 设置构建的,就像项目一样。如果我将项目设置为忽略 msvcprtd.lib,我最终会遇到大量 LNK2019 错误,正如我所料。

通过实验,我发现我可以从非 CLR C++ 测试项目中成功链接和使用 ofeli 库,但不能从启用 CLR 的项目中链接和使用(即使在启用 CLR 支持的情况下编译 ofeli 也是如此)。

下面是一个在我的 CLR 项目中因许多 LNK2005 错误而失败的简单代码片段。

我错过了什么?

0 投票
1 回答
2235 浏览

c++ - LNK2005 函数指针数组“已在 .obj 中定义”

好的,对该问题进行一些介绍:我正在使用在Windows 7 - 64 位操作系统上运行的Visual Studio 2012中的C++/DirectX11中的 C++/DirectX11 中的渲染引擎(以 32 位模式编译),并且出现了一个奇怪的链接错误我的班级(Entity3D就像场景的基本演员)。 我所有的包围体类都继承自一个Shape3D类。每个实体都有一个Shape3D * boundingVolume 成员,它在初始化时被初始化为特定的形状类型。当两个Shape3D 之间发生碰撞时,我通过一个函数传递它们 -然后该函数检查它们的类型(球体Entity

bool Intersect(Shape3D* a, Shape3D* b)/*Box*/Whatever) 类型表示一个数字,它是函数指针数组中函数的索引:

所以它就像一个虚拟调度。好的,这InersectArray是函数的数组(在 Intersect.h 中声明),这就是给我链接错误的原因:

Intersect.h仅包含在Entity3D.cpp中,不包含在Entity3D.h中,也不包含在 Entity3D.h 包含的任何标Entity3D.cpp仅包括Entity3D.hIntersect.h。我清理并重建,错误仍然存​​在。Intersect(Shape3D a, Shape3D* b)* 仅在Entity3D.cpp文件中的Entity3D的一种方法中调用。项目中当前没有其他编译错误或警告。还有什么可能导致这样的问题?

0 投票
0 回答
710 浏览

c++ - 尝试链接 Boost 1.53 时出现错误 LNK2005

我目前正在尝试链接到 boost lib

这是从此命令行创建的

但我收到以下链接错误(其中之一):

我增加了链接器的详细程度以了解有关此错误的更多信息,这就是我得到的:

似乎所有 boost 库都尝试从 MSVCP90D.dll 导入 std::string 函数

而我自己的程序似乎嵌入了 std::string 代码,因此尝试在内部进行链接。

我想我在这里有两个选择,要么我让 boost 嵌入 std::string 代码,所以 boost 和我的程序在两个 objs 中都有相同的声明,并且可以实现链接。我的程序必须像 boost 一样从 MSVCP90D.dll 导入 std::string 代码。

问题是我不知道如何在不导入 std::string 代码的情况下要求 boost 进行编译。而且我不知道如何强制我的程序从 MSVCP90D.dll 导入 std::string,有人知道吗?

我必须说我的程序显然是用 /MDd 选项编译的。Boost 也应该使用此选项编译,行runtime-link=shared

0 投票
1 回答
77 浏览

c++ - 使用辅助 .cpp 和 .h 处理链接错误

首先,我遇到问题的代码片段;

设置.h

设置.cpp

main.cpp //只是重要的部分..我没有忘记winapi需要的其他部分

我的问题:

  1. 以这种格式运行代码会触发 if 语句检查并关闭程序。

  2. 如果我删除命名空间匿名,我会得到变量的 LNK 2005 错误。

  3. 如果我简单地注释掉所有 settings.cpp 并将函数定义放入头文件中,我可以让代码运行,但这对我来说是一个简写。

我需要什么:显然对标头和辅助 .cpp 文件有更多的了解......并且可能是链接。我有几本书;kelly 的“2d 游戏编程”、harbour 的“beginning game programming”和 horton 的“visual C++ 2010”。有人可以指出一个地方的方向来更详细地了解我的问题,即让函数存在于 .cpp 中,而声明存在于标题中,或者推荐一本书来教我理解这些问题?

解决方案编辑:感谢 Mats Petersson(见评论)

代码的解决方案最终是;

  1. 删除匿名命名空间和括号。
  2. 在 settings.h 中的全局变量类型声明前应用 extern 前缀。
  3. 将普通的全局变量声明(例如 int window_width;)添加到 settings.cpp 文件中。
0 投票
1 回答
173 浏览

c++ - 出现 LNK2005 和 KNK1169 错误 - 包括另一个类

我收到这些错误:

从这三段代码:

和:

和:

我一生都无法弄清楚如何避免它。'extern' 解决方案似乎不起作用,并且 #ifndef 标头区域已被使用。

任何意见是极大的赞赏。

汤姆

0 投票
3 回答
2001 浏览

c++ - LNK2005,LNK1169 错误,“int __cdecl g(void)”(?g@@YAHXZ) 已定义

我在 Visual Studio 项目中有 3 个文件test.cppdate.cppmain.cpp-

测试.cpp:

日期.cpp:

主.cpp:

我知道如果多次调用头文件,在头文件中定义函数会导致违反单一定义规则。但在这里,我只从一个文件/翻译单元调用它一次。为什么还在扔LNK2005?

0 投票
2 回答
304 浏览

c++ - 使用 Direct3D9 的 LNK2005 错误

我目前正在尝试设置一个基本应用程序,并且我想使用 Direct3D9 作为 API 来绘制原始形状。例如,我想创建一个由圆形对象和三角形对象中的三角形等绘制的圆。

我的问题是我在不希望看到它们的地方收到 LNK2005 错误。那或者我错过了一些非常明显的东西,因为我之前使用过这种设置 Direct3D9 的方法,没有任何问题。

这是我从编译器收到的实际错误消息(VS 2010)

我目前有两个类(RigidBody 和 Circle),尽管目前只使用 RigidBody。

头文件.h

主文件

刚体.h

圈子.h

Circle 和 RigidBody 类也有自己的 .cpp 文件,但在这些“占位符”文件中还没有实现任何方法(或任何代码)。

那么任何人都可以看到为什么我会收到此错误吗?我希望它是一个简单的,但我不确定,因为在没有问题之前我已经以这种方式设置了 Direct3D 9。

当我说我之前以这种方式设置它时,我的意思是我已经将 Direct3D9 头文件和指针LPDIRECT3DDEVICE9放在LPDIRECT3D9全局头文件中并使用包含防护将其包围。这适用于我的上一个项目,我将两者进行了比较,没有明显差异。

我弄乱了警卫标识符,认为它可能无效或在其他地方使用,并且使用我能想到的最独特的警卫标识符给我带来了同样的错误。

当我放:

在 Main.cpp 中并将其从 Headers.h 文件中取出,项目编译良好。但是,我不想这样做,因为我想LPDIRECT3DDEVICE9从每个对象中访问,因为这是我打算设置原始形状的地方。

0 投票
1 回答
504 浏览

c++ - 包含全局函数时的c ++错误lnk2005

我正在开发一个 dll 项目,它一直运行良好,直到我添加了一个新的 .h,其中包括一个全局函数和一个结构。然后编译(或链接)失败。

这是错误消息:

我已经添加"#pragma once",但问题仍然存在。

如何解决这个问题呢?

谢谢!