C++ でごく簡単なShared Object形式のライブラリを書く
プログラムを解読していると、トレース用のファイルへ吐き出す関数が欲しくなるということで、作成。
/usr/include/mylib.h
#include <iostream> #include <fstream> #include <string> void mylog(const std::string& msg);
./mylib.c
#include <mylib.h> void mylog(const std::string& msg) { std::ofstream out_file("/tmp/mylog.log",std::iso::out|std::ios::app); if (out_file.fail()) return; out_file << msg << std::endl; }
#g++ -fPIC -shared mylib.c -o /usr/lib/libmylib.so
-fPIC Position Independent Code 関数はアドレスう空間のどこでも実行可能という意味。Shared Objectは動的にメモリ空間へロードされるので、どんなアドレスでも実行できることが必要。
作成するライブラリには必ずlib接頭文字が付いていないとリンクできません。
これにてShared Objectによるライブラリ作成完了。
./test.c
#include <mylib.h> int main(void){ mylog("test") }
#g++ text.c -o test -lmylib
-lオプションで指定するライブラリ名はlib+ライブラリ名.soというオブジェクトファイルをさしている。
#./text
#cat /tmp/mylog.log
test
以上。忘備録。