问题标签 [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.
c++ - 包括不工作的警卫?(已在 y.obj 中定义了 500 个 LNK2005 x 类型的错误)
我有一个大项目(400 个文件),所有标题都包含警卫和所有内容,但是我收到 500 LNK2005 错误。
可能是我在某些标头中定义了函数体吗?因为我在 DirectX 实用程序标头中看到了相同的内容(DirectXCollision 的某些功能完全在标头中)。
或者可能是因为他们使用的是 .inl 文件而不是 .cpp?
c++ - 命名空间和包含生成链接错误
当我遇到 lnk2005 错误时,我正在使用命名空间。我不知道如何解决这个错误。这是错误:
这是代码...
图表.h
Foo.h
图表.cpp
源.cpp
当 Source.cpp 中的 #include "Chart.h" 被删除时,问题就消失了。但是,Source.cpp 需要 #include "Chart.h" 来定义命名空间。
在 Chart.cpp 和 Source.cpp 中表达“命名空间图表”的正确方法是什么,以便一切都能编译?
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 错误而失败的简单代码片段。
我错过了什么?
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.h和Intersect.h。我清理并重建,错误仍然存在。Intersect(Shape3D a, Shape3D* b)* 仅在Entity3D.cpp文件中的Entity3D的一种方法中调用。项目中当前没有其他编译错误或警告。还有什么可能导致这样的问题?
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
c++ - 使用辅助 .cpp 和 .h 处理链接错误
首先,我遇到问题的代码片段;
设置.h
设置.cpp
main.cpp //只是重要的部分..我没有忘记winapi需要的其他部分
我的问题:
以这种格式运行代码会触发 if 语句检查并关闭程序。
如果我删除命名空间匿名,我会得到变量的 LNK 2005 错误。
如果我简单地注释掉所有 settings.cpp 并将函数定义放入头文件中,我可以让代码运行,但这对我来说是一个简写。
我需要什么:显然对标头和辅助 .cpp 文件有更多的了解......并且可能是链接。我有几本书;kelly 的“2d 游戏编程”、harbour 的“beginning game programming”和 horton 的“visual C++ 2010”。有人可以指出一个地方的方向来更详细地了解我的问题,即让函数存在于 .cpp 中,而声明存在于标题中,或者推荐一本书来教我理解这些问题?
解决方案编辑:感谢 Mats Petersson(见评论)
代码的解决方案最终是;
- 删除匿名命名空间和括号。
- 在 settings.h 中的全局变量类型声明前应用 extern 前缀。
- 将普通的全局变量声明(例如 int window_width;)添加到 settings.cpp 文件中。
c++ - 出现 LNK2005 和 KNK1169 错误 - 包括另一个类
我收到这些错误:
从这三段代码:
和:
和:
我一生都无法弄清楚如何避免它。'extern' 解决方案似乎不起作用,并且 #ifndef 标头区域已被使用。
任何意见是极大的赞赏。
汤姆
c++ - LNK2005,LNK1169 错误,“int __cdecl g(void)”(?g@@YAHXZ) 已定义
我在 Visual Studio 项目中有 3 个文件test.cpp
:date.cpp
和main.cpp
-
测试.cpp:
日期.cpp:
主.cpp:
我知道如果多次调用头文件,在头文件中定义函数会导致违反单一定义规则。但在这里,我只从一个文件/翻译单元调用它一次。为什么还在扔LNK2005?
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
从每个对象中访问,因为这是我打算设置原始形状的地方。
c++ - 包含全局函数时的c ++错误lnk2005
我正在开发一个 dll 项目,它一直运行良好,直到我添加了一个新的 .h,其中包括一个全局函数和一个结构。然后编译(或链接)失败。
这是错误消息:
我已经添加"#pragma once"
,但问题仍然存在。
如何解决这个问题呢?
谢谢!