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

时间:2017-01-30 18:51:10

标签: 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) {}

        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 */);

项目构建正常并创建一个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 Studio终端上没有打印任何内容(Native Tools命令提示符x86)。在Linux上,函数名称可以很好地打印到同一个bitcode文件中。

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

1 个答案:

答案 0 :(得分:0)

插件是Windows上的特殊动物,因为后者不支持正确的动态链接,因此,您的传递根本不会在PassRegistry中注册。因此,您需要将所有LLVM编译为.dll或将您的传递静态链接到opt / clang。