兜兜零元 发表于 2025-2-16 19:51:08

QT之error: LNK2038: 检测到“RuntimeLibrary”的不匹配项

静态编译了个QT5.15.16的库,结果按照老方法无法正常利用,报错
   Qt5Widgets.lib(qtabwidget.obj):-1: error: LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(mocs_compilation.cpp.obj 中)
https://i-blog.csdnimg.cn/direct/3106a520fb214c6b8ab976047054c52a.png
查阅了挺多资料,尝试许久,发现办理方式如下:
在项目的cmakelist里增长如下内容
https://i-blog.csdnimg.cn/direct/edd75d641e5c4196bd3bdf69f61e3e2b.png
# 判断是否使用 MSVC 编译器
if(MSVC)
    # 设置策略CMP0091为NEW,新策略
    if (POLICY CMP0091)
      cmake_policy(SET CMP0091 NEW)
    endif (POLICY CMP0091)
    # 设置MT/MTd
    set_property(TARGET Qt_static_third PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()  肯定要用上面这种。
下面这种没用。
# 判断是否使用 MSVC 编译器
if(MSVC)
    # 获取当前的构建类型
    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
      # 调试模式下添加 /MTd 标志
      set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
    elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
      # 发布模式下添加 /MT 标志
      set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
    endif()
endif()

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: QT之error: LNK2038: 检测到“RuntimeLibrary”的不匹配项