首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows10上运行LLVM passes在终端中没有输出?

在Windows10上运行LLVM passes在终端中没有输出?
EN

Stack Overflow用户
提问于 2017-01-31 02:51:10
回答 1查看 660关注 0票数 0

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

代码语言:javascript
复制
#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。

当我执行该命令时:

代码语言:javascript
复制
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选项,即便如此,一切在Ubuntu16.04上也能正常工作。

另外,如果我执行:

代码语言:javascript
复制
clang -Xclang -load -Xclang skeleton\Debug\SkeletonPass.dll foo.bc

Visual Studio终端(本地工具命令提示符x86)上没有打印出任何内容。在Linux上,对于相同的bitcode文件,函数名打印得很好。

我有这种经历的原因是什么?我在Windows10上做的和在Ubuntu上做的完全一样,但结果却截然不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 20:37:17

插件是Windows上的特殊野兽,因为后者不支持正确的动态链接,因此,您的pass不会在PassRegistry中注册自己。因此,您要么需要将所有的LLVM编译成.dll,要么静态地将pass链接到opt / clang。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41943353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档