Linux 在Windows 10上运行LLVM传递在终端中没有输出?

Linux 在Windows 10上运行LLVM传递在终端中没有输出?,linux,windows,clang,llvm,Linux,Windows,Clang,Llvm,我已经从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) {}

我已经从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 */);
opt
无法识别
-hello
选项,即使如此,Ubuntu 16.04上的一切都可以正常运行

此外,如果我执行:

clang -Xclang -load -Xclang skeleton\Debug\SkeletonPass.dll foo.bc
Visual Studio终端(本机工具命令提示符x86)上未打印任何内容。在Linux上,同一位代码文件的函数名打印得很好


我的经历的原因是什么?我在Windows 10上的操作与在Ubuntu上的操作完全相同,但结果却截然不同。

插件在Windows上是一种特殊的工具,因为后者不支持正确的动态链接,因此,您的密码根本不在PassRegistry中注册。因此,您需要将所有LLVM编译成.dll,或者将您的过程静态链接到opt/clang。

正确的动态链接是什么意思?如何将所有LLVM编译成.dll?在windows上,将符号从.exe导入已加载的.dll有点不寻常,而这是Linux/MacOS/FreeBSD上的普通操作。插件基础设施依赖于此进行正确的插件注册。如何将“所有LLVM”编译成.dll?
clang -Xclang -load -Xclang skeleton\Debug\SkeletonPass.dll foo.bc