refactor: 链接器从 gcc 改为 clang + lld(优先 clang→fallback gcc)

This commit is contained in:
2026-06-05 21:43:48 +08:00
parent 2baf762d82
commit 143174ee4f
+29 -4
View File
@@ -137,12 +137,37 @@ int main(int argc, char** argv) {
return 1;
}
// 调用 gcc 链接(MinGW 环境可用)
// 链接:优先 clang + lldLLVM 自带),fallback gcc
char cmd[1024];
int ret = -1;
// 构造 LLVM bin 路径(从 LLVM-C.dll 的位置推断)
char llvm_clang[512];
snprintf(llvm_clang, sizeof(llvm_clang),
"D:/settings/Language/LLVM/bin/clang.exe");
// 1) 优先: clang + lld(零新依赖,已随 LLVM 安装)
snprintf(cmd, sizeof(cmd),
"gcc \"%s\" -o \"%s\"",
obj_path, output);
int ret = system(cmd);
"\"%s\" -target x86_64-w64-windows-gnu -fuse-ld=lld \"%s\" -o \"%s\"",
llvm_clang, obj_path, output);
ret = system(cmd);
// 2) 备选: 系统 PATH 中的 clang
if (ret != 0) {
snprintf(cmd, sizeof(cmd),
"clang -target x86_64-w64-windows-gnu -fuse-ld=lld \"%s\" -o \"%s\"",
obj_path, output);
ret = system(cmd);
}
// 3) 最后 fallback: gcc
if (ret != 0) {
snprintf(cmd, sizeof(cmd),
"gcc \"%s\" -o \"%s\"",
obj_path, output);
ret = system(cmd);
}
if (ret != 0) {
fprintf(stderr, "链接失败 (exit code %d)\n", ret);
} else {