问题标签 [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 投票
1 回答
5488 浏览

c++ - 是什么导致我的代码中出现“错误 LNK2005:已在 .obj 中定义”错误?

我想知道是什么导致我的代码中出现双重定义链接器错误。这让我感到困惑,因为似乎没有任何理由。我认为我不会在会导致这种情况的地方添加#include任何文件,因为我的文件是线性结构的。.h#include

需要明确的是,我不是在问错误是什么意思,我是在问我的代码中是什么导致了它。我已经在这个网站(和其他网站)上研究了它的含义,但在我的代码中找不到与可能导致它的原因相关的答案。

顺便说一句,我正在使用 Visual Studio 2017

以下是错误:

这是我的代码结构:

简单类型.h:

复杂类型.h:

对象处理程序.cpp:

主文件

0 投票
0 回答
61 浏览

c# - WPF Exe 在 C++ DLL 中调用函数和设置变量

我有一个 WPF 应用程序,它需要调用用 C++ 编写的 DLL 中的函数。

插图

WPFAppClass.cs (C#)

SimDll.dll (C++)

DLLFnc.h

FncDll.cpp(我知道头文件和源文件的名称不同)

有没有办法可以从 C# exe 以某种方式在 C++ dll 中设置布尔和字符串?

PS:我是 C++ 的新手,但有相当多的 C# 知识。

0 投票
1 回答
68 浏览

c++ - LNK2005 死亡 (c++)

我有一个简单的课程:

兔子.h

兔子.cpp

(我重写了代码,因为我不能复制,所以只是一个快速编写的例子)

一个 includes.h 文件 #include 是这个,而 source.cpp #include 是那个。每个文件只包含一次,source.cpp 只包含一次includes.h 文件。我确实尝试过使用#ifndef、#define、#endif。这两种方法都导致了同样的问题:编译器说这个函数(以及我添加的任何其他函数)是多重声明的。我还尝试将定义复制到 source.cpp (Bunny.h 和 Bunny.cpp 都按原样复制)并且错误消失了。

知道为什么编译器要定义这个函数两次

0 投票
1 回答
72 浏览

c++ - 我在用 C++ 编程时一直出现 LNK2005 错误我似乎无法弄清楚问题是什么

我无法弄清楚这两个错误是什么。LNK2005 "public: bool __thiscall Bird::move(void)" (?move@Bird@@QAE_NXZ) 已经在 Bird.obj SFML-Game E:\Visual Studio Projects\SFML-Game\SFML-Game\main.obj 中定义

--------Bird.h-----

------Bird.cpp------

-----main.cpp-----

0 投票
0 回答
277 浏览

c++ - vc++ 中的 LNK2005 和 LNK 1160

我是 c++ 和 vc++ 的新手,我使用了 3rd 方库bioapi。我成功集成了它,但是当我尝试使用和的示例工作程序时,bioapi我得到了一个错误和。misc.hmisc.cppLNK2005LNK1160

顺便说一句,我在 vc++ 中将它创建为 CLR 项目,看来我不能使用 /FORCE 或 /FORCE:MULTIPLE。

这是杂项.h

杂项cpp

错误:

0 投票
1 回答
179 浏览

c++ - C++错误LNK2005和不同项目文件的一般继承

我有三个文件:

A.cpp

B.cpp

我遇到了我的功能 menu(); 的错误。已定义两次:

1>B.obj : 错误 LNK2005: "int __cdecl menu(void)" (?menu@@YAHXZ) 已在 A.obj 1>S:\Documents\Visual Studio 2012\Projects\Database\Debug\Database.exe 中定义: 致命错误 LNK1169: 找到一个或多个多重定义的符号 ========== 构建: 0 成功, 1 失败, 0 最新, 0 跳过 ==========

带有错误代码:

错误 2 错误 LNK2005: "int __cdecl menu(void)" (?menu@@YAHXZ) 已在 A.obj S:\Documents\Visual Studio 2012\Projects\Database\Database\B.obj 数据库中定义

请感谢我的代码中发现的任何帮助或错误,干杯:)

使用 IDE Microsoft Visual Express 2012

0 投票
1 回答
292 浏览

c# - 在 UE4(虚幻引擎 4)中集成 LuaJit 时出现 LNK2005 错误

lua51.lib(lua51.dll) : 错误 LNK2005: _vsnprintf 已经在 libcurl_a.lib(cryptlib.obj) 中定义

GameName.Build.cs ->

ActorName.cpp ->

我为 64x 编译了 LuaJit,我不包括 32x 构建,我需要吗?我不打算为 32 位系统发布我的游戏,因为没有意义大声笑(除了 IOS,因为我很确定您必须上传 32 位和 64 位版本的应用程序:3)

我只包含过一次 Lua51.lib 吗?我做错了什么吗?

0 投票
1 回答
55 浏览

c++ - 构建 Visual C++ 2008 项目时出现链接器错误

我最近的任务是尝试将 C++ 项目从旧的 Windws 2003 服务器迁移到 Windows 2008。目前,我正在尝试在我的 Windows 7PC 上本地构建应用程序。我已按照收到的安装指南进行操作。事情似乎进展得很好。我遇到的问题是,在编译步骤之后,链接器给了我以下错误:

顺便说一下,这是在调试模式下运行的。在发布模式下,我遇到了同样的错误。我可以给你看对应的 CPP 文件:

  1. CellSortTypeIds.h 文件:

    /li>
  2. CellSortTypeIds.cpp 文件

    /li>

我的 C++ 知识不是很好。我已经阅读了关于这个问题的几篇关于 SO 的帖子,其中一些讲述了配置的运行时,一些关于不在头文件中定义运算符,而是将它们放在 cpp 文件中。在这里,我相信情况并非如此。

我怀疑这两个文件中存在我无法弄清楚的问题。任何想法都值得赞赏。如果您需要更多详细信息,请告诉我。提前感谢您,请不要犹豫,就问题的结构提供任何反馈,因为这是我的第一个问题,毕竟。

0 投票
1 回答
94 浏览

c++ - 为什么编译器要向 lib 添加内联类方法?

考虑一个属于链接到动态库 (foo.dll) 的项目的类,同时生成 foo.lib:

然后还有另一个项目bar(生成静态库bar.lib)包含这个类。该项目不与 foo 链接。

最后有一个应用程序项目(生成 .exe),它与 foo.lib 和 bar.lib 链接。当它发生时,链接器会发出 LNK2005 错误,该错误Foo::bar已经在 foo.lib(这很好)和 bar.lib 中定义,这是出乎意料和奇怪的。

根据https://docs.microsoft.com/en-us/cpp/build/reference/symbols?view=vs-2017使用 dumpbin.exe /SYMBOLS 处理 bar.lib 时,输出显示Foo::bar确实在 foo.lib 中定义(!)。这很奇怪,因为根据这个出色的https://stackoverflow.com/a/4955288答案,在类的主体中声明和定义的任何成员函数都是隐式内联的,因此不会导致 ODR 问题。

最后,最有趣的部分。当将Foo::bar定义移动到 .cpp 文件并在类主体中只保留方法的声明时,问题就消失了。

为什么呢?知道做错了什么吗?我想我已经阅读了关于这个主题的整个互联网并尝试了所有各种 VS 配置开关,但只有将定义移动到 .cpp 有帮助。原则上我最终可以做到,但这似乎不是解决问题的正确方法。

环境是:Visual Studio 10。

编辑:
IMP_EXP_DIRECTIVE_MACRO 设置为:
“__declspec(dllexport)”,在构建 foo.dll 时
“”,在构建 bar 时

编辑 2:
问题也消失了,当在编译 bar.lib 时添加了一个预处理器标志,导致class __declspec(dllimport) Foo使用而不是class Foo.
这是正确的方法吗?

0 投票
1 回答
79 浏览

c++ - LNK2005 函数已经定义在

我读到“如果你在头文件(Header.h)中声明并实现一个函数,并且如果这个文件被包含两次,那么你很可能会在某个时候得到一个函数已经定义的错误。”。但是在我的代码中,我遇到错误的所有函数都在一个 .cpp 文件中。

列表.h

列表.cpp

矩阵.h

矩阵.cpp

源.cpp

我添加了所有文件,也许有一些我看不到的东西。错误出在bool empty(list*& start)函数上(“已在List.obj”中定义)。