Conan依赖构建运行时不一致:静态Boost需/MD运行时
解决Conan中静态Boost依赖使用/MD运行时的问题
你的核心问题是:项目要求用/MD(多线程DLL运行时)编译,但Conan默认给静态Boost依赖配置了/MT(多线程静态运行时),导致运行时不兼容。以下是直接的解决方案:
修改Conan配置代码
需要在配置中显式指定Boost的静态链接属性和运行时类型,同时同步依赖库的配置避免冲突:
from conans import ConanFile class MyProject(ConanFile): requires = "zlib/1.2.13", "boost/1.80.0", "cpprestsdk/2.10.18", "opencv/4.5.5", "geogram/1.8.2@lib/dynamic" generators = "visual_studio" default_options = { "cpprestsdk:shared": True, "opencv:shared": True, "geogram:shared": True, # 指定Boost为静态链接,并使用MD系列运行时 "boost:shared": False, "boost:runtime": "MD", # 同步zlib的运行时配置,避免依赖冲突 "zlib:shared": False, "zlib:runtime": "MD" } settings = "os", "compiler", "build_type", "arch" def configure(self): # 移除硬编码的编译器版本,建议通过命令行或profile指定(如conan install -s compiler.version=15) # 若必须强制VS2017,可改用条件判断: if self.settings.os == "Windows" and self.settings.compiler == "msvc": self.settings.compiler.version = "15"
关键配置说明
boost:shared=False:告诉Conan拉取/编译静态版本的Boost库boost:runtime="MD":指定Boost使用/MD(Release)或/MDd(Debug)运行时,Conan会根据build_type自动匹配- 同步zlib配置:Boost部分模块依赖zlib,确保两者使用相同的运行时类型,避免链接冲突
- 移除硬编码编译器版本:直接赋值会覆盖用户环境设置,改用命令行参数(
-s compiler.version=15)或profile文件更灵活
验证方法
运行conan install后,打开生成的Visual Studio项目,检查Boost相关编译选项,确认运行时参数为/MD(Release)或/MDd(Debug)而非/MT//MTd。
内容的提问来源于stack exchange,提问作者yekmen
相关产品推荐
相关产品推荐

