在使用llvm opt工具加载pass的时候报错undefined symbol: _ZTIN4llvm12FunctionPassE 求助达大佬如何解决
opt版本信息:
opt --version
LLVM (http://llvm.org/):
LLVM version 9.0.1
DEBUG build with assertions.
Default target: x86_64-unknown-linux-gnu
Host CPU: goldmont
clang 版本信息
clang --version
clang version 9.0.1
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
写的测试 pass代码如下
include "llvm/Pass.h"
include "llvm/IR/Function.h"
include "llvm/Support/raw_ostream.h"
include "llvm/IR/LegacyPassManager.h"
using namespace llvm;
namespace {
struct Hello : public FunctionPass {
static char ID;
Hello() : FunctionPass(ID) {}
bool runOnFunction(Function &F) override {
errs() << "Hello: ";
errs().write_escaped(F.getName()) << '\n';
return false;
}
}; // end of struct Hello
} // end of anonymous namespace
char Hello::ID = 0;
static RegisterPass<Hello> X("hello", "Hello World Pass",
false / Only looks at CFG /,
false / Analysis Pass /);
static RegisterStandardPasses Y(
PassManagerBuilder::EP_EarlyAsPossible,
[](const PassManagerBuilder &Builder,
legacy::PassManagerBase &PM) { PM.add(new Hello()); });
顶层cmake代码如下
cmake_minimum_required(VERSION 3.10)
find_package(LLVM REQUIRED CONFIG)
add_definitions(LLVMDEFINITIONS)includedirectories({LLVM_INCLUDE_DIRS})
add_subdirectory(hellopass)
pass目录cmake代码如下
add_library(LLVMhellopass MODULE hello.cpp)
最终执行opt --load /home/re/myllvmpass/build/hellopass/libLLVMhellopass.so 的报错信息如下
Error opening '/home/re/myllvmpass/build/hellopass/libLLVMhellopass.so': /home/re/myllvmpass/build/hellopass/libLLVMhellopass.so: undefined symbol: _ZTIN4llvm12FunctionPassE
-load request ignored.
|