You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ninja生成器与LLVM编译器时CMake库路径配置及链接问题

问题:CMake+Ninja+Clang构建C++项目时链接oldnames.lib/msvcrtd.lib失败

核心需求:使用CMake搭配Ninja生成器,基于LLVM Clang编译器构建C++项目,需要链接oldnames.lib和msvcrtd.lib两个库。

问题现象:目标库实际存在,但CMake测试编译器阶段,lld-link报错找不到这两个文件。不过CMake本身能通过find_library成功定位到它们:

# Find the required libraries
find_library(OLDNAMES_LIB oldnames.lib)
find_library(MSVCRD_LIB msvcrtd.lib)

if (NOT OLDNAMES_LIB)
    message(FATAL_ERROR "Failed to find oldnames.lib")
endif()

if (NOT MSVCRD_LIB)
    message(FATAL_ERROR "Failed to find msvcrtd.lib")
endif()

尝试过的无效方案

我尝试了多种方式传递链接器标志,但CMake输出显示这些标志并未传递给C编译器:

  • 使用target_link_libraries直接链接库:
target_link_libraries(sound_sculptor_test PRIVATE "${MSVCRD_LIB}" "${OLDNAMES_LIB}")
  • 使用target_link_options指定库路径:
target_link_options(sound_sculptor_test PRIVATE "-L\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/lib/onecore/x64/\"")
  • 设置全局链接器标志:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OLDNAMES_LIB} ${MSVCRD_LIB}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OLDNAMES_LIB} ${MSVCRD_LIB}")

此外,我还将CFLAGS和CXXFLAGS设置为包含对应库路径,但问题依旧。

环境版本

  • CMake 3.26.4
  • Make 4.4.1
  • Ninja 1.11.1
  • LLVM 16.0.6

解决办法

只需在设置CFLAGS环境变量后,删除CMake生成的CMakeCache.txt文件,重新运行CMake配置即可解决问题。


内容的提问来源于stack exchange,提问作者John Glen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:43:24