You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用LLVM初始化函数导致main函数控制台输出失效的问题

Windows+MinGW环境下LLVM v15.0.6控制台无输出问题

我在Windows系统搭配MinGW环境,用LLVM v15.0.6开发C语言简易编译器时遇到异常:程序能正常编译运行,但控制台始终没有任何输出——哪怕我在执行其他操作前就调用了fflush(stdout),依旧无效。

完整代码如下:

#include <llvm-c/Core.h>
#include <llvm-c/Transforms/PassManagerBuilder.h>
#include <llvm-c/Analysis.h>
#include <llvm-c/TargetMachine.h>
#include <llvm-c/BitWriter.h>

#include <stdio.h>

int main()
{
    printf("TEST");
    fflush(stdout);

    LLVMContextRef context = LLVMContextCreate();
    LLVMModuleRef module = LLVMModuleCreateWithNameInContext("test", context);

    LLVMTypeRef f32 = LLVMFloatTypeInContext(context);
    LLVMTypeRef ftype = LLVMFunctionType(f32, 0, 0, 0);
    LLVMValueRef ftest = LLVMAddFunction(module, "ftest", ftype);
    LLVMBasicBlockRef bb = LLVMAppendBasicBlockInContext(context, ftest, "ftest");
    LLVMBuilderRef builder = LLVMCreateBuilderInContext(context);
    LLVMPositionBuilderAtEnd(builder, bb);
    LLVMValueRef v1 = LLVMConstReal(f32, 2.5);
    LLVMValueRef v2 = LLVMConstReal(f32, 4.3);
    LLVMValueRef result = LLVMBuildFAdd(builder, v1, v2, "f-add");
 encoder对LB双简易 interior望困顿 repro壮 serving LatestFOLLVMDisposeMessage(errors);

    LLVMInitializeAllTargetInfos();
    LLVMInitializeAllTargets();
    LLVMInitializeAllTargetMCs();
    LLVMInitializeAllAsmParsers();
    LLVMInitializeAllAsmPrinters();

    LLVMTargetRef target;
    LLVMGetTargetFromTriple(LLVMGetDefaultTargetTriple(), &target, &errors);
    printf("error: %s\n", errors);
    LLVMDisposeMessage(errors);
    printf("target: %s, [%s], %d, %d\n", LLVMGetTargetName(target), LLVMGetTargetDescription(target), LLVMTargetHasJIT(target), LLVMTargetHasTargetMachine(target));
    printf("triple: %s\n", LLVMGetDefaultTargetTriple());
    printf("features: %s\n", LLVMGetHostCPUFeatures());
    LLVMTargetMachineRef machine = LLVMCreateTargetMachine(target, LLVMGetDefaultTargetTriple(), "generic", LLVMGetHostCPUFeatures(), LLVMCodeGenLevelDefault, LLVMRelocDefault, LLVMCodeModelDefault);

    LLVMSetTarget(module, LLVMGetDefaultTargetTriple());
    LLVMTargetDataRef datalayout = LLVMCreateTargetDataLayout(machine);
    char *datalayout_str = LLVMCopyStringRepOfTargetData(datalayout);
    printf("datalayout: %s\n", datalayout_str);
    LLVMSetDataLayout(module, datalayout_str);
    LLVMDisposeMessage(datalayout_str);

    LLVMTargetMachineEmitToFile(machine, module, "result.o", LLVMObjectFile, &errors);
    printf("error: %s\n", errors);
    LLVMDisposeMessage(errors);
    return 0;
}

但将以下LLVM初始化代码注释后,程序就能正常输出内容:

// LLVMInitializeAllTargetInfos();
    // LLVMInitializeAllTargets();
    // LLVMInitializeAllTargetMCs();
    // LLVMInitializeAllAsmParsers();
    // LLVMInitializeAllAsmPrinters();

编译命令:

gcc -I(LLVM Path)/include test.c (LLVM Path)/bin/LLVM-C.dll

内容的提问来源于stack exchange,提问作者Zipper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:17:53