とりあえずの状況
環境
VisualBox上だが,
この状況で
Writing an LLVM Pass — LLVM 3.8 documentation
のサンプルコードのPassをコンパイルした.
#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; } }; } char Hello::ID = 0; static RegisterPass<Hello> X("hello", "Hello World Pass", false, false);
コンパイルのコマンドを入力
g++ -g ./hello.cpp -c - o hello.o
この時, ヘッダファイルが見つからないというエラーが出た.(いまエラーファイルがないので, あとから付け足す予定)
回避方法として -IオプションをつけてLLVMをbuildしたときにできたヘッダーディレクトリ郡の絶対パスを付け足してコンパイルした.
そうしたところ, さらになんかでた.(これも後で付け足します.)
それにも, なんかオプションつけた(あとで(略))
その次に
g++ -g shared -o ./hello.so hello.o
で動的リンクをして共有ライブラリを作成した.
で, optコマンドを使って先ほどの共有ライブラリをロードしようと試みたが, "このファイルは動的リンクされていません"的なエラーが出力.
動的リンクができてないらしい.
fileコマンドをつかってしらべてみると, 確かにその旨を伝える部分が存在しない.
なんかいろいろ調べていたら, -fno-rttiをオプションとして付けなければならないらしい.
これをつけて実行したら動的リンクに成功.
最終的にoptコマンドでhello.cpp Passを動かすことができた.
一応今の現状はこんな感じです. 忘備録をつくっているのに
エラーとかコマンドとか
をメモる癖がないので, 非常にわかりにくいものとなってしまった.なるべく次からは気を付けたいと思う.
それと, 毎日更新予定でいたが, あんまり進捗も産めなさそうなのでどうしようか悩み中.
気ままにLLVM系の英語のニュースでも訳そうかなって思っている.