vs运行时 /md,/mdd 和 /mt,/mtd之间的区别
Kyocera
2024-05-26 15:16:31
最佳回答
在一个项目要用到opencv,刚开始使用了opencv的动态链接库,这样,在移动可执行程序时还必须将opencv动态支持库一起搬移,很是麻烦。所以,最终选择opencv静态链接库,这样程序移植运行就方便了很多。需要编译成静态库以便于应用程序链接。 网上有的教程中写的在vc++2011下安装opencv2.1时用到了tbb库,而我在编译链接自己的程序后需要用到tbb.dll。本人设计的目的就是要做一个独立的界面程序,不需要携带其他第三方库。经过一段时间的努力最终找到了编译opencv2.1静态库的方法。需要的工具环境及文件:-------------------------------------------------------------------------------------------------------------1、windows xp2、vc++2011(vs2011)3、为编译opencv源码包(我下载的有:opencv2.1.0,opencv2.3.0及opencv2.4.4)4、cmake2.8.9说明:opencv各版本官方下载地址:opencv.org/cmake-2.8.9下载地址:**hare.iask.sina.com.cn/download/explain.php?fileid=35025936--------------------------------------------------------------------------------------------------------------以opencv2.1.0编译静态库为例cmake配置-------------------------------------------------------------------------------------------------------------打开cmake并设置:where ** the rource code :opencv源代码所在的文件夹where to build the binaries:cmake配置好得到的文件放在位置(我的:e:\opencv2.1.0-prj)然后点击configure,选择"v**ual studio 10"。然后确定。等待configure完成,会出现很多红色的选项,因为主要是生成opencv的库,所以只需保留某些选项:去掉build_new_python_support,build_shared_libs, build_tests勾选opencv_build_3rdparty_libs, with_tbb,with_jasper, with_jpeg, with_png, with_tiff选项,然后再点击configure,如下图:提示tbb_include_dir找不到,因为我们不需要tbb库,所以忽略,再一次点击configure。等待配置完成,最后点击generate,完成后关闭cmake。-------------------------------------------------------------------------------------------------------------vc++2011编译静态库-------------------------------------------------------------------------------------------------------------进入e:\opencv2.1.0-prj目录,使用vc++2011打开.sln文件,打开项目管理器这时候会看到解决方案中有很多小项目存在。注:这时我们右键任意点击一个子项目(如cv),选择属性,可以在配置属性下的常规项目中看到,配置类型为 静态库(lib)。按住ctrl键,选中除过all_build, install, zero_check, uninstall四个项目的其他所有项目,在菜单中选择项目->属性,打开配置属性->c/c++->代码生成选项,在右侧窗口中的运行时库中选择多线程调试(/mtd),然后确认。说明:这里有四个选项(/mt, /mtd, /md, /mdd),前两个一组,为静态链接运行时库,运行时不需要运行时库的支持,代码直接插入到程序中去;后两个一组,为动态链接运行时库,运行时需要msvcr90.dll或msvcp90.dll支持。我们先编译debug版的opencv静态库,在解决方案"opencv"(22个项目)上单击右键,选择重新生成解决方案,此时便开始编译opencv库了,等编译结束会提示完成16个,失败4个:这四个项目生成的是exe程序,不需要管他们。到这步我们已经生成了debug版本的静态库!然后我们用相同的方式生成release版的库,在之前的基础上只需要将选项选择多线程/mt,再进行编译。编译时警告很多,直接忽略!注意:/mt即是release版本,/mtd即是debug版本。最终我们需要的静态库就存在:e:\opencv2.1.0-prj/lib 和 e:\opencv2.1.0-prj/3rdparty/lib 两个目录,我们编译好的库就在这两个文件夹下。分别将e:\opencv2.1.0-prj/3rdparty/lib中debug 下面的所有文件copy到e:\opencv2.1.0-prj/lib中的debug 文件中。将e:\opencv2.1.0-prj/3rdparty/lib中release下面的所有文件copy到e:\opencv2.1.0-prj/lib中的release文件中。 20210311