使用Conan与CMake构建C++项目时无法找到assimp-vc142-mt.lib的问题咨询
解决Conan+CMake链接Assimp时LNK1104找不到assimp-vc142-mt.lib的问题
这个问题我之前在对接Conan和Assimp时也碰到过,大概率不是包本身的问题,而是配置环节的细节没对齐,咱们一步步排查:
1. 核对Conan安装的Assimp与项目的Runtime配置
你的Conan默认配置里compiler.runtime=MD(多线程DLL运行时),但报错里找的是mt后缀的库——这说明Runtime配置不匹配:
- 用
conan info .命令查看当前项目依赖的Assimp包详情,重点看compiler.runtime和build_type是否和你的Conan配置一致。 - 如果Assimp实际是用
MT(多线程静态运行时)编译的,那生成的库就是assimp-vc142-mt.lib,但你的项目用MD的话,链接器会去找md后缀的库;反过来如果Conan装的是MD版本,CMake项目却用了MT,就会出现找不到mt库的错误。
2. 强制CMake的Runtime与Conan同步
很多人会忽略CMake的运行时默认设置,要在CMakeLists.txt里明确指定和Conan一致的Runtime:
# 对应MD(Release)和MDd(Debug),和Conan的compiler.runtime=MD对齐 set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
如果你的项目需要用MT,那要同步修改Conan配置里的compiler.runtime=MT,并重新安装Assimp包。
3. 确认Conan的CMake导入脚本正确执行
- 如果你用的是Conan 1.x,确保
CMakeLists.txt里正确导入了Conan生成的配置:
然后链接时直接用include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup(TARGETS) # 推荐用TARGETS模式,更可靠target_link_libraries(你的项目名 CONAN_PKG::assimp),避免手动写库名出错。 - 如果是Conan 2.x,要确保在CMake配置阶段指定了Conan的工具链文件:
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
4. 手动验证Conan缓存里的Assimp库文件
去Conan缓存目录找到Assimp的安装路径(默认是C:\Users\<你的用户名>\.conan\data\assimp\<版本>\_\_\package\<包ID>\lib),查看里面的库文件名:
- 如果是
assimp-vc142-md.lib,说明CMake的Runtime设置错了,回到步骤2修正; - 如果是
assimp-vc142-mt.lib,说明Conan安装时用的Runtime和你的配置不一致,清除缓存重新安装:conan remove assimp* -f conan install .. --build=missing
5. 检查Assimp的Conan包选项
部分Assimp的Conan包有自定义选项,比如是否生成静态/动态库,需要在conanfile.txt里明确指定:
[requires] assimp/<你使用的版本> [options] assimp:shared=False # 静态库,如需动态库设为True
静态库和动态库的链接逻辑不同,选错也可能导致库名不匹配的问题。
内容的提问来源于stack exchange,提问作者Ada
相关产品推荐
相关产品推荐

