Clang 为什么叮当可以';我不能这样用

Clang 为什么叮当可以';我不能这样用,clang,llvm,Clang,Llvm,//当前位于llvm项目目录中 //a.c int main() { printf("Hello world\n"); } 上面的命令不起任何作用。当下列命令生效时: clang -Xclang -load -Xclang build/lib/LLVMHello.so a.c clang-emit llvm-c a.c opt-load build/lib/LLVMHello.so-hello

//当前位于llvm项目目录中

//a.c 
int main() {
 printf("Hello world\n");
}
上面的命令不起任何作用。当下列命令生效时:

clang -Xclang -load  -Xclang build/lib/LLVMHello.so a.c
clang-emit llvm-c a.c
opt-load build/lib/LLVMHello.so-hello
这是因为LLVMHello演示程序注册了pass-by

clang -emit-llvm -c a.c
opt -load build/lib/LLVMHello.so -hello < a.bc
然后可以使用
clang-Xclang-load-Xclang XXX.so
。通过这种方式,您可以在叮当声或opt中加载它

static RegisterPass<Hello> X("hello", "Hello World Pass");
static void registerHelloPass(const PassManagerBuilder &, legacy::PassManagerBase &PM) {
    PM.add(new Hello());
}
static RegisterStandardPasses RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible, registerHelloPass);