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

c++ - 未解决的外部错误

我有以下 .h 和 .cpp 文件

如果必须,我将包含函数定义的完整代码

当我编译我的程序时,我得到了最后显示的错误

哈希.h

ht.cpp

主文件

当我尝试使用 vc2010 编译它时出现以下错误

1>main.obj : error LNK2005: "struct fpinfo * __cdecl InitHTable(struct fpinfo (* const)[50000])" (?InitHTable@@YAPAUfpinfo@@QAY0MDFA@U1@@Z) 已经在 ht.obj 中定义

1>main.obj : error LNK2005: "int __cdecl CreateTanker(struct tanker_record * const)" (?CreateTanker@@YAHQAUtanker_record@@@Z) 已经在 ht.obj 中定义

1>main.obj : error LNK2005: "int __cdecl Hash_CreateEntry(struct fpinfo * (* const)[50000],struct fpinfo,struct tanker_record * const)" (?Hash_CreateEntry@@YAHQAY0MDFA@PAUfpinfo@@U1@QAUtanker_record@@@ Z)已在 ht.obj 1>main.obj 中定义:错误 LNK2005:“int curr_tanker”(?curr_tanker@@3HA)已在 ht.obj 1>main.obj 中定义:错误 LNK2019:未解析的外部符号“int __cdecl Hash_CreateEntry (struct fpinfo *,struct fpinfo,struct tanker_record)" (?Hash_CreateEntry@@YAHPAUfpinfo@@U1@Utanker_record@@@Z) 在函数 _main 1>main.obj 中引用:错误 LNK2019:未解析的外部符号“struct fpinfo * __cdecl InitHTable (struct fpinfo *)" (?InitHTable@@YAPAUfpinfo@@PAU1@@Z) 在函数_main中引用

感谢您的帮助!!

0 投票
3 回答
8861 浏览

visual-studio - LNK2005 将静态 openCV 库与 Visual Studio 和 QT Creator 链接时出错

我构建了静态 openCV 2.3 库。我的项目目前使用动态库没有问题,但现在我想使用静态库。我将库添加到我的 .pro 文件中:

并包括目录:

当我尝试构建时,出现以下错误:

任何帮助或建议表示赞赏。

0 投票
1 回答
798 浏览

c++ - 带有外部“C”的两个文件上的C ++ lnk2005错误,为什么?

我有一个带有外部“C”功能的 CPP。如果它们都在一个文件中,那么一切都很好。出于组织目的,我想将功能拆分为不同的文件。

所以假设我有这两个文件:

File_One.cpp

File_Two.cpp

我尝试以不同的顺序重新排列我的包含标头,甚至除了 file_two.cpp 的包含之外,甚至在 file_one.cpp 中没有放置包含标头,但我总是遇到相同的错误。

1) 错误 LNK1169:找到一个或多个多重定义符号

2) 错误 LNK2005: _MethodTwo 已在 File_One.obj 中定义

我到底做错了什么?我应该怎么做才能修复它?

谢谢!

0 投票
1 回答
171 浏览

c++ - 很多 LNK2005 错误

我正在尝试(或者更确切地说是在努力)创建一个小二十一点游戏。在一些 JavaScript 课程和一些小项目之后,我决定切换到 C++,发现它有点问题,这是我的代码:

http://pastebin.com/raw.php?i=4MgC1VcD

对于你们中的许多人来说,这段代码可能很糟糕,但它让我真的很高兴编码,即使它不像我想要的那样工作:) 这就是我得到的:

http://i.stack.imgur.com/HpyvC.png

0 投票
0 回答
327 浏览

c++ - 编译 DLL 时出错 - 错误 LNK2005

我想编译一个 DLL,当我包含以下内容时出现此错误<afxdb.h>

我确实有一个DllMain函数,xlfunctions.cpp这是我的 DLL 的入口点。

Use of MFC property设置为Use MFC in a Shared DLL

我该如何解决这个错误?

谢谢

0 投票
2 回答
3178 浏览

c++ - C ++ LNK2005“已定义”错误-引用自身的文件

我继承了一个带有 3 个项目的 C++ 解决方案,一个编译为 .DLL,另外两个编译为 .EXEs 。DLL 可以自行构建,但其他两个在构建时会产生大约 65 个 LNK2005 错误,其中大部分是引用相同的 .obj 文件,如下面的日志所示:



....所以它继续!

我是一名 C# 编码员,只有基本的 C++ 知识,所以我对此感到迷茫。该解决方案是一个已有 15 年历史的 C 解决方案,我正在尝试在 VS2008 中将其重建为 C++ 解决方案。我已经设法构建了一次,没有任何改变,但也许从那时起一些配置设置已经改变。

有没有人有想法我可以开始寻找......?

非常感谢!

0 投票
1 回答
1533 浏览

c++ - LNK 2005 链接器问题与 msvcrt.lib(MSVCR90.dll)

我正在与客户共享一个静态库。它使用的是 vs2008 sp 1。

我正在使用我用 mfc 构建的第三方库,带有共享 dll 和 /MD 选项发布版本

然后我构建了我自己的静态库,其中包括带有共享 dll 选项和 /MD 发布版本的 MFC 的第三方库。

我创建了一个测试 dll 以确保它正常工作。没有问题运行良好。我根本没有使用 MFC。只有客户这就是为什么他们告诉我将 MFC 与共享 dll 和 /MD 一起使用。

现在他们抱怨说他们得到了

xyz 已在 msvcrt.lib(MSVCR90.dll) 错误中定义。我认为这些看起来像 LNK2005 错误。

他们陈述如下:

“由于“我的库”与大型制造工具链构建中常见的许多库进行静态链接,因此具体链接失败。“我的库”正在导出这些常见的库函数,从而导致链接冲突。

他们还说:

“为了解决这个问题,“我的库”只能公开与单个 API(来自我的静态库)本身关联的函数,以保证不会导致链接冲突。当“我的库”为使用链接器选项和模块定义(.def 文件)语句的组合构建"

我不确定是什么导致了这个问题。这对我来说不是问题,但在那里。我在想他们可能在使用不正确的选项或错误的 CRT 版本时遇到问题?

另外,我不确定我能否满足他们可能不与 msvcrt.lib(MSVCR90.dll) 链接的要求,因为我的静态库确实依赖于标准 c 函数等。

我现在很迷茫,我确实研究了几个链接 如何分发 C 运行时 (CRT) 库

http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-recent-visual-studio-libraries/

但是如果链接中说明了 CRT 的问题,那么我不确定如何弄清楚我在 vs2008 中使用的静态库是什么 CRT。我已经使用 /verbose 来查看它,但它不起作用。而且我知道dumpbin 或dependency walker 不会将它用于静态库。

这几天一直在为此苦苦挣扎,并且疯狂地研究。没有关于为什么他们可能会遇到 msvcrt.lib(MSVCR90.dll) 问题的答案。

0 投票
1 回答
641 浏览

c++ - 调试对象上的 LNK2005 和 LNK1169

我已经非常广泛地阅读了这两个错误,但尽管我付出了所有努力,但我在这里看不到问题所在。我已经完全用标题保护淹没了我的代码,看看这是否有帮助,结果没有改变。这是每个文件: Mystring.cpp

我的字符串.h

MystringDerived.h

MyStringDerived.cpp

和我得到的错误

有数百个错误行都看起来像这样。以我组织包含的方式,我绝对看不出我最终会如何包含多个副本。还有什么我想念的吗?任何见解都值得赞赏。这是作业(显然),所以当我在这里完成时,我肯定想真正理解问题。没有人向我展示过我做错了什么。

谢谢!

忘记包含 test.cpp。目前就这么简单:

MyStringDerived m = "测试"; cout<< m.getStr(); 获取字符();返回0;

0 投票
3 回答
3179 浏览

c++ - VS 2010 C++ LNK2005 错误同时使用 #pragma once 和 #ifndef

我通过谷歌搜索了解了为什么会出现这些错误,但我不知道为什么当我尝试过 #pragma 一次和 #ifndef 保护时它们仍然会发生。

这是我的卡片.h

还有我的 Deck.h

这可能很明显,但我无法弄清楚......

根据要求,这里是 Card.cpp:

这是我为测试它们而写的东西:

0 投票
1 回答
403 浏览

c++ - C++ Unity 构建库文件,LNK2005

我是统一构建的新手。我一直在做一些研究,并从以下方面获得了很好的信息:

但是,现在我开始对我的一些项目进行更改,我有点困惑。

为简单起见,假设我的解决方案中只有 2 个项目。一个库项目(它创建一个 .lib 文件)和一个可执行项目。我们称它们为 LibProj 和 ExecProj。

这是每个项目的样子:

Verbose.cpp用于调试目的。它包装了 ostream,所以我没有使用cout <<,而是使用verbose <<. 这样做是为了控制何时向控制台显示详细输出。在我的版本变体中,所有详细输出都被跳过。

我在两个项目中都有一个副本的原因Verbose.cpp是我可以在我的 ExecProj 中获得详细的输出,而无需在调试中构建 LibProj。

Driver.hppClient.cpp使用verbose <<. MyMainFile.cpp调用它们中的函数。

不用说,使用正常的构建方式,一切正常。

现在问题...

Unity.cpp在 LibProj 中创建。它的内容是:

LibProj 构建得很好。但是,当我构建 ExecProj 时,它会在链接过程中中断:

所以基本上,它抱怨是因为我们正在重新定义 lib 文件中已经存在的详细函数。

我的问题是,为什么单独编译文件时它可以工作,但它不适用于统一构建?

是什么让一个 .lib 文件与另一个不同?我的意思是,从技术上讲,这两种构建案例LibProj.lib都有符号VerboseMonitor::print,这些符号由 ExecProj 重新定义。但是,统一构建案例失败了。

解决此问题的一种方法是创建另一个仅包含 Verbose.cpp 的 lib 文件并将其从两个项目中删除。但是,我想先了解为什么会发生这种情况。

另外,有人能想出更好的方法来解决这个问题吗?