我该如何链接LLVM库?

3
当我使用命令 "gcc .. ../../*.so" 时,出现以下错误信息:
/usr/bin/ld: /home/demonwnb/build/src/*.so: error: undefined reference to 'llvm::raw_ostream::operator<<(void const*)'
/usr/bin/ld: /home/demonwnb/build/src/*.so: error: undefined reference to 'clang::DeclarationName::printName(llvm::raw_ostream&) const'

我认为我没有正确链接“llvm库”,那么我该怎么做?

2个回答

6

您需要告诉编译器从哪里加载库,这可以使用llvm-config命令完成。

您可以在makefile中设置以下符号。

CC = g++

LLVM_MODULES = core jit native

CPPFLAGS = `llvm-config --cppflags $(LLVM_MODULES)`
LDFLAGS = `llvm-config --ldflags $(LLVM_MODULES)`
LIBS = `llvm-config --libs $(LLVM_MODULES)`

all:
    $(CC) *.o $(LDFLAGS) $(LIBS) -o MyOutput
main:
    find -name '*.cpp' -print0 | xargs -0 $(CC) -c $(CPPFLAGS)

@kunou:这是我使用LLVM的项目makefile中的一部分摘录。您可能需要稍微调整一下才能使其适用于您的项目! - Chethan Ravindranath
1
值得一提的是,LLVM将自身构建为一组静态库。一些链接器对-lLLVM*标志的顺序非常敏感,因此强烈建议使用llvm-config脚本。如果您正在使用CMake,则可以使用llvm_map_components_to_libraries() - arrowd
@kunou 如果这个方法对你有用的话,你可以将其标记为正确答案! - Chethan Ravindranath
find 是用来做什么的? - Galaxy
@Galaxy:find命令是用来查找所有扩展名为.cpp的文件。这个列表将被输入到gcc进行编译。这并非绝对必要。如果你想在Makefile中静态列出文件,甚至可以使用$(CC) file1.cpp file2.cpp -c $(CPPFLAGS)。 - Chethan Ravindranath

0
你尝试使用g++进行链接了吗?那些是C++库,gcc不会将C++库传递给链接器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接