2009-06-04 63 views
4

我一直有以下形式的链接错误:如何在Visual Studio(LNK2005)中解决此链接错误?

libcmtd.dll msvmrtd.dll 一些元素(例如:_mkdir)已经 定义...

,我不知道如何解决它们。

下面是一个完整的错误消息:

私人:__thiscall TYPE_INFO :: TYPE_INFO(类TYPE_INFO常量&)” (?? 0type_info @@ AAE @ ABV0 @@ Z)在 LIBCMTD已经定义的.lib(typinfo.obj)

MSVCRTD.LIB(ti_inst.obj):错误LNK2005: “私人:类TYPE_INFO & __thiscall TYPE_INFO ::运算=(类TYPE_INFO常量&)”(?? 4type_info @@ AAEAAV0 @ ABV0 @@ Z)已在 LI中定义BCMTD.lib(typinfo.obj)

你能帮我解决这个问题吗?

+0

我有`type_info`类完全相同的链接器问题。我从Multithreaded-Debug-DLL更改为Multithreaded-Debug。在此之前,一切都奏效了。但是,我需要Multithreaded-Debug才能让我的程序在不同的计算机上工作。你有没有找到解决方案? – 2013-05-16 10:19:44

回答

4

你的问题是你正在链接两个文件提供相同的符号。

你还没有提供真正的错误信息,所以我们不能确切地告诉你问题是什么,但它很可能是你从两个不同版本的Visual Studio链接库。

也有通过搜索网络(我假设你这样做,但错过了有问题的文章:-)的解决方案,建议你可以通过将项目选项从"Multi-threaded Debug(/MTd)"更改为"Multi-threaded Debug DLL (/MTD)"来解决问题,但我没有看着这个。

请发布完整的错误,以便我们可以提供更有针对性的帮助。

+0

http://stackoverflow.com/questions/935161/visual-c-runtime-library-linker-woes plzzzz检查此链接一次。 – Cute 2009-06-04 07:36:05

8

检查的几件事情:

  1. 是守卫你的头文件。即他们有没有#ifndef警卫。

  2. 您是否在标题中定义(非模板)函数,而不使用inline关键字。这大量的东西起来。

  3. 您是否试图在.cpp文件中定义模板。所有模板定义都需要在标题中。

请发表一些代码和确切的错误文本,请!

+1

+1:当我使用C++和lnk2005错误困扰了我好几天,修正是`#ifndef`警卫。 – 2010-02-09 00:53:08

1

LNK4098上的MSDN文章有一个非常有用的表格:它告诉您要手动添加到“忽略特定库”列表的库,具体取决于您使用的CRT。您需要选择CRT(多线程或不;静态或DLL;调试或发布),然后根据您的选择添加忽略库。

的根本原因进行了更详细的KB154753 ... libraries that a program will link with when built by using Visual C++

我的这种解释说明的是,在某些情况下,可以自动挑选其中CRT库的算法与链接代码会挑几个冲突库。

2

确保为Runtime Libary链接选择的选项对于每个项目和库都是相同的。 项目属性 - >配置属性 - > C/C++ - >代码生成 - >运行时库 - >“多线程”/“多线程DLL”/ ...

我的问题是我所有的C++项目是“多线程”,但我引用的Fortran模块是“多线程DLL”