C 运行时 LLVM 错误:加载共享库时出错

问题描述 投票:0回答:1

我正在尝试使用 LLVM 作为后端来编写我的第一个 C 编译器,但是当我尝试运行它时出现错误。我在其他地方没有找到任何有关此确切错误消息的信息。 这是错误消息:

./build/cave: error while loading shared libraries: libLLVMWindowsManifest.so.19: cannot open shared object file: No such file or directory

最新的 LLVM 是从源代码安装的,我运行了

make
,也运行了
make install

操作系统:WSL Debian 12

生成文件:

CC := clang
PROJECT := cave
CFLAGS := -Wall -Wextra -Werror -Wpedantic
# LLVM stuff
CFLAGS += `llvm-config --cflags`
LDFLAGS := `llvm-config --ldflags`
LIBS := `llvm-config --libs`

INCLUDES := -Iinclude
SRC_DIR := src
SRC := $(wildcard $(SRC_DIR)/*.c)
BUILD_DIR := build
OBJ := $(SRC:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o)
.PHONY: all build clean

all: build

build: $(BUILD_DIR)/$(PROJECT)

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
    @mkdir -p $(@D)
    $(CC) $(CFLAGS) -c $< -o $@ $(INCLUDES) $(BUILD_ARGS)

$(BUILD_DIR)/$(PROJECT): $(OBJ)
    $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LIBS) $(BUILD_ARGS)

release:
    $(MAKE) BUILD_ARGS="-O3" -B

clean:
    rm -rf $(BUILD_DIR)

codegen.h:

#pragma once

#include <llvm-c/Types.h>

typedef struct LLVMBackend {
    LLVMContextRef context;
    LLVMModuleRef module;
    LLVMBuilderRef builder;

    LLVMValueRef *(*generateLLVMIR)(struct LLVMBackend *);
} LLVMBackend;

LLVMBackend backend_new(void);
void free_backend(LLVMBackend);

这也是 codegen.c 文件:

#include "codegen.h"

#include <llvm-c/Core.h>
#include <stddef.h>

static LLVMValueRef *generateLLVMIR(LLVMBackend *self) {
    (void)self; // not used yet
    return NULL;
}

LLVMBackend backend_new(void) {
    LLVMContextRef context = LLVMContextCreate();
    LLVMModuleRef module =
        LLVMModuleCreateWithNameInContext("example", context);
    LLVMBuilderRef builder = LLVMCreateBuilderInContext(context);
    return (LLVMBackend){
        .context = context,
        .module = module,
        .builder = builder,

        .generateLLVMIR = generateLLVMIR,
    };
}

void free_backend(LLVMBackend backend) {
    LLVMDisposeBuilder(backend.builder);
    LLVMDisposeModule(backend.module);
    LLVMContextDispose(backend.context);
}

我尝试使用

make clean
重新安装 LLVM 二进制文件,然后再次使用
make
make install
,但没有成功。

c runtime llvm windows-subsystem-for-linux llvm-ir
1个回答
0
投票

您需要指定可执行文件在运行时可以找到 LLVM 库的路径:

export LD_LIBRARY_PATH=$(llvm-config --libdir):$LD_LIBRARY_PATH
./build/cave
© www.soinside.com 2019 - 2024. All rights reserved.