【发布时间】:2010-11-21 06:37:21
【问题描述】:
我要问这个问题,然后自己回答。 我知道这是一个新手问题,但我花了大约。两天找到正确答案,我还是贴吧。
免责声明就这么多 - 这是献给所有新手的:
我在 VS 2010 中做了一个 MFC 项目,我需要添加一些第 3 方静态库。一切顺利,两个项目都已编译,我的项目设法引用了该库。然后,当我在项目中包含库中的一些头文件时,我收到了许多关于 C 运行时库中函数的链接器警告,例如:
警告 9 警告 LNK4006:_sprintf 已在 libcmtd.lib(sprintf.obj) 中定义;第二个定义忽略 C:path\to\my\project\MSVCRTD.lib(MSVCR100D.dll)
在想'这到底是什么',我尝试运行我的项目,它确实运行了,直到它遇到一个试图使用'fostream'写入某个文件的代码行,然后它因一些可怕的堆损坏异常而崩溃.
搜索 S.O.,我遇到了一些相关的问题,没有一个完全符合我的问题:
- Link libraries with dependencies in Visual C++ without getting LNK4006
- How do you build a debug .exe (MSVCRTD.lib) against a release built lib (MSVCRT.lib)?
在我偶然发现答案之前,我几乎将外部库包装在一个 dll 中。
【问题讨论】:
标签: c++ linker-warning