gpt4 book ai didi

compiler-construction - 使用 llvm 库构建时如何链接?

转载 作者:行者123 更新时间:2023-12-02 21:10:07 24 4
gpt4 key购买 nike

我正在尝试解析 LLVM-IR 文件(.ll)并进行静态分析..

我在下面找到了这个示例代码,并尝试构建它,但我不知道要链接哪个库。

#include <iostream>
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"

using namespace llvm;

int main(int argc, char** argv)
{
if (argc < 2) {
errs() << "Expected an argument - IR file name\n";
exit(1);
}

LLVMContext &Context = getGlobalContext();
SMDiagnostic Err;
std::unique_ptr<Module> Mod = parseIRFile(argv[1], Err, Context);

if (Mod) {
std::cout << "Mod is not null" << std::endl;
}
else {
std::cout << "Mod is null" << std::endl;
}
return 0;
}

我给出了以下命令来构建,它给了我一些未定义的引用错误,我认为这是一个链接错误。

g++ -I~/llvm/build/include -I~/llvm/llvm/include  -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -std=c++11 test.cpp

我应该使用 -L 选项链接哪个库文件才能构建此示例代码?我希望它作为一个独立的二进制文件工作,而不是作为整个编译过程中的一个过程。

最佳答案

如果您将项目设置为 llvm 的子项目,您可以阅读 this tutorialexamples

但是既然你提到了“独立”,我猜你试图从 llvm 源项目构建你的项目。 llvm-config 是你的 friend 。

例如,您可以在 tools/llvm-link 中找到它的 Makefile 内容如下:

LINK_COMPONENTS := linker bitreader bitwriter asmparser irreader

或在CMakeLists.txt中:

set(LLVM_LINK_COMPONENTS
BitWriter
Core
IRReader
Linker
Support
)

然后您可以使用llvm-config来查看如何链接这些库。

$ llvm-config --libs linker bitreader bitwriter asmparser irreader

$ llvm-config --libs BitWriter Core IRReader Linker Support

他们将输出链接选项,例如:

-lLLVMLinker -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMIRReader -lLLVMBitReader -lLLVMAsmParser -lLLVMBitWriter -lLLVMCore -lLLVMSupport

llvm-config --components 可以用来查看所有官方组件;如果您厌倦了指定组件,只需使用llvm-config --libs,它就会发出所有可链接库。

当然你应该首先确保库目录在你的链接路径中,这就是结果llvm-config --libdir

您可以使用llvm-config --help获取其他有用的选项。

关于compiler-construction - 使用 llvm 库构建时如何链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33948633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com