2012-02-05 99 views
0

默认情况下,Visual Studio编译项目以使用Visual Threat运行时中的多线程DLL。我想用/ MT而不是/ MD来编译我的程序。当然,大多数系统已经安装了这个系统,并且它也可以重新分配。编译没有多线程DLL的程序(Visual C++ 2010)

当我改变/ MD到/ MT,我得到一个错误:

MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)

而且四五个类似的错误。 要尝试解决此问题,我从默认库中删除了LIBCMT.LIB。

然后我得到的错误:

libcpmt.lib(_tolower.obj) : error LNK2019: unresolved external symbol __calloc_crt referenced in function __Getctype

从默认列表中删除MSVCRTD.LIB导致类似的错误? 应该注意的是: - 这是一个OpenGL项目,使用glfw库。 - 我使用lonesock的SOIL图像库进行纹理加载。

+1

什么是您的构建设置?因为MSVCRTD是MSVCRT的调试版本。 – Bart 2012-02-05 11:37:53

+1

可能的重复[解决LNK4098:defaultlib'MSVCRT'冲突](http://stackoverflow.com/questions/3007312/resolving-lnk4098-defaultlib-msvcrt-conflicts-with) – 2012-02-05 12:32:22

回答

3

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

要么你有一些调试设置挂在你自己的项目中,要么就是链接到你正在使用的库的调试版本。

永远不要混用调试版本和发布版本。如果幸运的话,你会得到这样的错误。在一些罕见的情况下,所有魔法似乎都会奏效,直到没有。