在Windows 10上运行LLVM传递在terminal没有输出?

我有来自LLVM.org的示例代码:

#include "llvm/Pass.h" #include "llvm/IR/Function.h" #include "llvm/Support/raw_ostream.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 */); 

该项目build立良好,并创build一个SkeletonPass.dll。

当我执行命令时:

 C:\Users\nlykkei\Projects\llvm-pass-tutorial\build>opt -load skeleton\Debug\SkeletonPass.dll -hello foo.bc opt: Unknown command line argument '-hello'. Try: 'opt -help' opt: Did you mean '-help'? 

opt不承认-hello选项,即使这样一切工作正常在Ubuntu 16.04。

另外,如果我执行:

 clang -Xclang -load -Xclang skeleton\Debug\SkeletonPass.dll foo.bc 

Visual Studioterminal上没有打印出任何内容(本地工具命令提示符x86)。 在Linux上,相同的位代码文件很好地打印了函数名称。

什么可以是我的经验的原因? 我在Windows 10上的操作与我在Ubuntu上完全一样,但结果却非常不同。

在Windows上插件是特殊的野兽,因为后者不支持正确的动态链接,所以你的通行证根本不会在PassRegistry中注册。 所以你需要将所有的LLVM编译成.dll,或者将你的pass静态地链接到opt / clang。