如何避免C++中的"已定义的错误"

Man*_*ora 6 c++ linker visual-studio-6

我在链接应用程序时在MFC VS6项目中遇到这些类型的错误:

msvcrt.lib(MSVCRT.dll) : error LNK2005: _atoi already defined in LIBC.lib(atox.obj)
Run Code Online (Sandbox Code Playgroud)

我知道它意味着什么(一个函数存在于两个不同的库中); 解决它我应该排除2个库(msvcrt.liblibc.lib)中的一个.

但是,如果我这样做,会有各种未解决的外部错误.所以我想继续使用这两个库.

有没有办法告诉链接器我想要使用该_atoi函数libc.lib而不是msvcrt.lib(或其他方式)?

任何帮助或方向都会很棒.

fbo*_*net 11

此错误当然意味着您要链接使用不同运行时库编译的两段代码.MSVCRT.dll是动态版本,而LIBC.lib是静态版本.如果你这样做,那么一切都会破裂.尝试查找代码的哪些部分使用哪个版本,然后对其进行排序.


Man*_*ora 1

似乎有一个选项可以用来忽略这样的错误:在项目设置>链接>中选中“强制文件输出”。即使存在链接错误,这也会生成程序。

构建输出给出如下内容:

msvcrt.lib(MSVCRT.dll) :警告 LNK4006:_atoi 已在 LIBC.lib(atox.obj) 中定义;忽略第二个定义

当然,您需要小心使用此选项,因为它可能会生成在某些情况下无法工作的应用程序,但在这里它可能不会造成任何损害(我希望)。

感谢您的其他答复,但这似乎不是我的具体情况的选择。