要被批评了,好久没写了。主要是觉得没什么可写的。今天分享一下如何使用/MT和/MD在VC下编译C/C++程序
/MT 的意思就是使用微软的多线程静态链接库
/MD 的意思就是使用微软的多线程动态链接库
在VS中的工程选项里面C/C++可以设置/MT /MD和调试版本/MTd /MDd
当然更高级一点直接在makefile或者命令行的cl的编译参数中加上/MT或者/MD也可以达到一样的效果,需要注意的是,只能有一个,不能同时生效的
接下来,用/MT编译没有依赖msvcrt.dll的应用程序去了,发现链接的时候报了成百上千个符号重复错误,这个情况只是在偶尔会发生,主要可能是因为配置混乱。
修正这个问题也很简单,常在命令行下自己敲makefile的人很清楚,在link中加上/NODEFAULTLIB:msvcrt.lib msvcprt.lib忽略原来的默认动态连接库,指定让编译器链接libcmt.lib和libcpmt.lib(在VS下用C语言的同学无视后面这个库哈,那个是C++的)就完美的解决了。
在工程属性里面的Link中的忽略指定默认库加上msvcrt.lib,然后附加库中加上libcmt.lib和libcpmt.lib是一样的效果.这样做简单的工程是没有问题的,最好还是找一个干净的编译环境.