@@ -17,7 +17,7 @@ pip install cmake -i https://pypi.tuna.tsinghua.edu.cn/simple
1717conda install -c conda-forge ninja
1818
1919# 安装 Clang/LLVM 作为 C/C++ 编译器
20- conda install -c conda-forge clangdev
20+ conda install -c conda-forge clangdev llvmdev
2121```
2222
2323---
@@ -52,3 +52,55 @@ pip install conan -i https://pypi.tuna.tsinghua.edu.cn/simple
5252```
5353
5454Conan 可用于自动化管理第三方 C/C++ 库依赖,推荐在需要复杂依赖时启用。
55+
56+ ## 4. Windows 下用 Clang 的典型“坑”
57+
58+ 这是 Windows 下用 Clang 的一个典型“坑”:Clang 在 Windows 上默认模拟 ** MSVC 工具链** ,所以会去找 ` link.exe ` 和 MSVC 的运行库。如果你没装 Visual Studio Build Tools,就会报错。
59+
60+ 不过,** conda 环境里有办法绕过对 MSVC 的依赖** ,主要有两条路线:
61+
62+ ---
63+
64+ ### 🛠️ 方案一:使用 LLVM 自带的 ` lld-link `
65+ 1 . 安装 Clang 和 lld:
66+ ``` bash
67+ conda install -c conda-forge clang lld
68+ ```
69+ 2 . 在 CMake 或构建系统中指定使用 ` lld-link ` 作为链接器:
70+ ``` bash
71+ cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_LINKER=lld-link .
72+ ```
73+ 3 . 这样 Clang 就不会再调用 MSVC 的 ` link.exe ` ,而是用 LLVM 的 ` lld-link ` 来完成链接。
74+
75+ ---
76+
77+ ### 🛠️ 方案二:使用 MinGW 工具链
78+ 1 . 安装 MinGW-w64 工具链:
79+ ``` bash
80+ # 稳定版(推荐,适合 Python 扩展)
81+ conda install -c conda-forge m2w64-toolchain
82+
83+ # 最新版(适合追新或和 MSYS2 环境统一)
84+ conda install -c msys2 m2w64-toolchain
85+ ```
86+ 2 . 配置 CMake,让 Clang 使用 MinGW 的 ` ld ` 和运行库:
87+ ``` bash
88+ cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_CXX_STANDARD_LIBRARIES=" -lstdc++ -lgcc -lm -lpthread"
89+ ```
90+ 3 . 这样 Clang 会走 MinGW 的运行库,而不是 MSVC。
91+
92+ ---
93+
94+ ### ⚖️ 对比
95+ | 路线 | 优点 | 缺点 |
96+ | ------| ------| ------|
97+ | ** LLVM + lld-link** | 完整 LLVM 工具链,现代化,链接速度快 | 仍需 Windows SDK 的头文件和库(可通过 ` conda-forge::vs2015_runtime ` 等包解决一部分(即 ` conda install -c conda-forge vs2015_runtime ` )) |
98+ | ** MinGW 工具链** | 完全不依赖 MSVC,conda 内即可自洽 | 与 Windows 原生 ABI 不完全兼容,某些库可能不适配 |
99+
100+ ---
101+
102+ ### 🎯 建议
103+ - 如果你要做 ** 跨平台科学计算/扩展模块** (比如 Python C 扩展),推荐 ** 方案一(Clang + lld-link)** ,更接近 MSVC ABI,兼容性好。
104+ - 如果你要做 ** 纯开源跨平台项目** ,不依赖 MSVC ABI,可以用 ** 方案二(MinGW)** ,完全摆脱 Visual Studio。
105+
106+ ---
0 commit comments