编译并没有多线程DLL的程序(Visual C++2010)



默认情况下,Visual Studio编译项目以使用Visual Studio运行时中的多线程DLL。我想只使用/MT而不是/MD来编译我的程序。当然,大多数系统都已经安装了这个,而且它也可以作为可重新分发的。

当我将/MD更改为/MT时,我得到一个错误:

MSVCRTD.lib(MSVCR100D.dll):错误LNK2005:_free已在LIBCMT.lib(free.obj)中定义

还有四五个类似的错误。为了解决这个问题,我从默认库中删除了LIBCMT.LIB。

然后我得到错误:

libcpmt.lib(_tlower.obj):错误LNK2019:函数__Getctype 中引用的未解析外部符号__calloc_crt

从默认列表中删除MSVCRTD.lib会导致类似的错误吗?需要注意的是:-这是一个OpenGL项目,使用glfw库。-我正在使用lonsock的SOIL图像库进行纹理加载。

如果没有任何进一步的精确信息,我想说你的第一个问题是你在某种程度上混合了库的发布版本和调试版本。MSVCRTD.lib是MSVCRT.lib的调试版本。

您自己的项目中有一些调试设置,或者您正在链接使用的库的调试版本。

永远不要混合调试和发布版本。如果你幸运的话,你会犯这样的错误。在一些罕见的情况下,一切似乎都神奇地起作用,直到它不起作用。

最新更新