linux - Running LLVM passerer på Windows 10 giver ingen output i terminal?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har eksemplet pass kode fra 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()) << '
';
            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 */);


Projektet bygger fint og skaber en SkeletonPass.dll.


Når jeg udfører kommandoen:


C:Users
lykkeiProjectsllvm-pass-tutorialuild>opt -load skeletonDebugSkeletonPass.dll -hello foo.bc
opt: Unknown command line argument '-hello'.  Try: 'opt -help'
opt: Did you mean '-help'?


opt anerkender ikke -hello mulighed, selv altså fungerer alt fint på Ubuntu 16.04.


Desuden, hvis jeg udfører:


clang -Xclang -load -Xclang skeletonDebugSkeletonPass.dll foo.bc


intet udskrives på Visual Studio-terminalen (Native Tools Command Prompt x86). På Linux udskrives funktionsnavne pænt for den samme bitkodefil.


Hvad kan være årsagen til min oplevelse? Jeg gør præcis det samme på Windows 10 som jeg gør på Ubuntu, men meget forskellige resultater.

Bedste reference


Plugins er specielle dyr på Windows, fordi sidstnævnte ikke understøtter korrekt dynamisk linking, så dit pas simpelthen ikke registrerer sig i PassRegistry. Så du enten har brug for at kompilere alle LLVM til .dll, eller link dit passord statisk til opt/clang.