如何避免“已定义的错误”,在C ++(how to avoid “already defined e

2019-09-16 21:00发布

我gettings这些类型的MFC VS6项目的错误,同时连接的应用程序:

msvcrt.lib(MSVCRT.dll) : error LNK2005: _atoi already defined in LIBC.lib(atox.obj)

我知道这意味着什么(功能在2个不同的图书馆存在的话); 为了解决它,我应该排除2个库(之一msvcrt.liblibc.lib )。

但是,如果我这样做有各种无法解析的外部错误。 所以,我想用这两个库保管。

有没有办法告诉我要使用的链接器_atoi功能libc.lib而不是在msvcrt.lib (或周围的其他方法)?

任何帮助或方向将是巨大的。

Answer 1:

这个错误一定意味着你要链接已经使用不同的运行时库编译代码的两件。 MSVCRT.dll的是动态的版本,而LIBC.LIB是静态的。 如果你这样做,所有的地狱冲出重围。 试着找到你的代码使用的零部件的版本,和排序了这一点。



Answer 2:

你有一个运行时发生冲突。 使用多个运行时库通常是一件坏事。

在你的连接选项排除一个或另一个可以使用/ NODEFAULTLIB:MSVCRT(的libc或/ NODEFAULTLIB)。

事实上,诉诸于前,请检查您的项目设置。 如果我没有记错,libc的是VS6单线程运行,并且MSVCRT是多线程运行。 如果您在您的解决方案有多个项目,确保它们都使用一个或另一个。



Answer 3:

好像有,你可以用忽略这样的错误的选项:在projectsettings>链接>选中“强制文件输出”。 这将产生即使有linkerrors程序。

构建输出给出这样的事情:

MSVCRT.LIB(MSVCRT.dll的):警告LNK4006:_atoi在LIBC.LIB(atox.obj)已经定义; 第二个定义被忽略

当然,你将需要使用此选项时请小心,因为它可以产生,不会在某些情况下工作的应用程序,但在这里它可能不会做任何伤害(我希望)。

谢谢你的对方回复,但似乎并没有在我的具体情况的选项。



文章来源: how to avoid “already defined error” in C++