visual studio运行时库MT、MTd、MD、MDd

VS编译器多线程库详解
本文详细解析了VS编译器中MT、MTd、MD和MDd四种多线程库的区别,以及在sqlite使用过程中的注意事项,强调了运行时库一致性的重要性。

MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库

MTd:mutithread+debug,多线程调试版,连接LIBMITD.lib库

MD:MT+DLL,多线程动态库,连接MSVCRT.lib库,这是个导入库,对应动态库为MSVCRT.dll

MDd: MT+DLL+debug,多线程动态调试库,连接MSVCRTD.lib库,对应动态库为MSVCRTD.dll

FAG笔记:
sqlite使用过程中,在用.c和.h生成.lib时需要注意运行时的调整上面四种运行时的情况,如果不一致,则会出现冲突的情况。
2019年2月17日

今日收获与总结:
如何最快的解决问题,
1需要根据vs编译器提供的信息,仔细阅读有限的英文提示,在百度里搜索相关的文章,特别是搜索优快云里面的文章。
2.根据文章仔细研究相关的周边知识,以便快速定位,学习知识点最好要有例子,哪怕是简单的例子。
3.出错的地方都是跳不过去的鸿沟,差下的知识必须补上。
4.任何问题应该有一个简单的结果。
5.熟能生巧,多次反复,提高效率。

### ### OpenCV 编译时如何配置不同的运行时库选项 /MT /MTd /MD /MDd OpenCV 在使用 CMake 生成 Visual Studio 工程文件时,可以通过修改项目属性来控制使用的运行时库类型。运行时库的选择影响程序在运行时是否依赖 Microsoft Visual C++ 运行时 DLL(如 `msvcr100.dll` 或 `msvcp100.dll`)。 默认情况下,CMake 会根据所选的构建类型(Debug 或 Release)设置相应的运行时库选项。例如,在 Debug 构建中通常使用 `/MDd` 或 `/MTd`,而在 Release 构建中使用 `/MD` 或 `/MT`。为了确保链接一致性,整个项目及其依赖的库必须使用相同的运行时库选项。 如果希望将 OpenCV 静态编译并使用多线程调试模式(即 `/MTd`),需要在生成工程后手动修改所有相关项目的运行时库设置。具体操作为: - 打开 Visual Studio 解决方案。 - 右键点击除 `ALL_BUILD`, `INSTALL`, `ZERO_CHECK`, `uninstall` 之外的所有项目。 - 选择“属性” → “配置属性” → “C/C++” → “代码生成”。 - 将“运行时库设置为 `/MTd`[^2]。 这种方式适用于希望避免运行时依赖 VC++ 动态库的情况,特别适合部署到没有安装 VC++ 运行库的机器上。 若需使用动态运行时库(即 `/MD` 或 `/MDd`),则无需额外修改,因为这是 CMake 默认生成的配置。此时,程序在运行时需要对应的 `MSVCRT.lib` 和 `MSVCRxx.DLL` 文件支持。需要注意的是,如果某个库是用 `/MT` 编译的,而主程序或另一个库使用 `/MD`,会导致链接错误,因为它们引用了不同的运行时库版本[^4]。 此外,OpenCV 提供了一些预编译库路径,例如 `F:\Opencv\build\x86\vc10\staticlib`,这些静态库可以直接被引用,但使用时仍需确认其运行时库设置是否与当前项目一致。如果不一致,可能会导致链接错误或运行时崩溃。因此,在调试环境下建议显式设置 `/MTd` 并验证兼容性[^1]。 --- ```bat # 示例:使用 CMake 生成 Debug 模式下的 VS2013 工程,并指定 x64 平台 cmake.exe -G "Visual Studio 12 2013" -A x64 -DCMAKE_BUILD_TYPE=Debug .. ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值