From 143174ee4fb378b558640016f82836de5884e76a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Fri, 5 Jun 2026 21:43:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=93=BE=E6=8E=A5=E5=99=A8?= =?UTF-8?q?=E4=BB=8E=20gcc=20=E6=94=B9=E4=B8=BA=20clang=20+=20lld=EF=BC=88?= =?UTF-8?q?=E4=BC=98=E5=85=88=20clang=E2=86=92fallback=20gcc=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/driver/main.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/driver/main.c b/src/driver/main.c index 2f28f51..abe6568 100644 --- a/src/driver/main.c +++ b/src/driver/main.c @@ -137,12 +137,37 @@ int main(int argc, char** argv) { return 1; } - // 调用 gcc 链接(MinGW 环境可用) + // 链接:优先 clang + lld(LLVM 自带),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 {