refactor: 链接器从 gcc 改为 clang + lld(优先 clang→fallback gcc)
This commit is contained in:
+29
-4
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user