我要问这个问题,然后自己回答。我知道这是一个新手问题,但我花了大约。两天找到正确答案,无论如何我都会发布它。
免责声明就这么多——这个是献给所有新手的:
我在 VS 2010 中做了一个 MFC 项目,我需要添加一些第 3 方静态库。一切顺利,两个项目都已编译,我的项目设法引用了该库。然后,当我在项目中包含库中的一些头文件时,我收到了许多关于 C 运行时库中函数的链接器警告,例如:
警告 9 警告 LNK4006:_sprintf 已在 libcmtd.lib(sprintf.obj) 中定义;第二个定义被忽略 C:path\to\my\project\MSVCRTD.lib(MSVCR100D.dll)
想着'这到底是什么',我尝试运行我的项目,它确实运行了,直到它遇到一个试图使用'fostream'写入某个文件的代码行,然后它因一些可怕的堆损坏异常而崩溃。
搜索 SO,我遇到了一些相关的问题,没有一个完全符合我的问题:
在我偶然发现答案之前,我几乎将外部库包装在一个 dll 中。