Windows平台下Clang如何使用LLVM libcxx替代MSVC C++标准库
Windows平台Clang切换使用libc++的配置方法
-fno-ms-compatibility与-fno-ms-extensions仅用于禁用MSVC语法兼容扩展,不会修改Clang默认的标准库查找逻辑,因此仍会调用MSVC的STL库,需要额外添加参数指定使用libc++:
前置检查
- 确认你的Windows版LLVM已包含libc库:LLVM 14及以上版本的官方预编译包默认携带libc,如果使用的是13.0.0这类更低版本,需要在编译LLVM时开启
-DLIBCXX_ENABLE_SHARED=ON -DLIBCXX_ENABLE_STATIC=ON选项生成对应库文件,或者直接升级到LLVM 14及以上版本。
编译参数配置
编译C++代码时需同时添加以下参数:
- 标准库指定参数
-stdlib=libc++,告知Clang使用libc++而非默认的MSVC STL - 链接参数
-lc++abi,指定链接对应的c++abi库 - 若需要完全脱离MSVC运行时,可额外添加
-nostdinc++参数禁用默认的MSVC头文件查找路径,配合-I<你的LLVM路径>/include/c++/v1手动指定libc头文件路径,链接阶段添加-L<你的LLVM路径>/lib指定libc库文件路径
完整示例命令
以你使用的LLVM 13.0.0路径为例,修正后的编译命令如下:
/cygdrive/d/LLVM/13.0.0/bin/clang.exe P92092.C -fno-ms-compatibility -fno-ms-extensions -stdlib=libc++ -lc++abi -I/cygdrive/d/LLVM/13.0.0/include/c++/v1 -L/cygdrive/d/LLVM/13.0.0/lib
常见问题说明
- 如果运行生成的程序时提示找不到libc++.dll,将LLVM安装目录下的bin文件夹路径添加到系统PATH环境变量即可
- 如果你使用的是MinGW环境下的Clang,不需要额外指定头文件和库路径,仅添加
-stdlib=libc++参数即可
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

