cpplibという気になる単語を目にすることがよくある。gccを-vつきで実行していると、cpp(プリプロセッサ)が呼び出されずにcc1(コンパイラ)が直接実行されている。バージョン情報にはCPPが(cpplib)という注釈つきで出てくるのである。
なにぃー! cppの機能をライブラリで使えるというのか!!
しかしgccパッケージを見てもlibcpp.aやcpplib.hは入っていない。くそう、おいしいところを独占しやがって!!
ということで、gccのソースを展開してcpplibだけを抜き出そうとしたが、これがなかなかどうして、けっこう大変なようだ。まだ、道半ば。
やはり素人はpopen()を使えということなのかなぁ。
現状、↓のようなプログラムのコンパイルまではどうにか通るようにしたものの、リンクでいろいろunresolved symbolが出まくる。どの.oとどの.oをライブラリにぶち込んだら許してくれるのだろうか…面倒だがいろんな作業だけでどうにかなるかもしれない。
#include <stdio.h>
#include “cpplib2.h”
int main(int argc, char *argv)
{
cpp_reader *rd;
rd=cpp_create_reader(CLK_GNUC89);
cpp_preprocess_file(rd, “cpplib.h”, stdout);
return 0;
}
cppをmain()抜きに拡張するか、gccのcpplibを抜粋するか、果たしてどちらを選ぶのが賢かったのだろうか。
(追記) 2004-03-08 14:58
よく考えたら、m4とかmakeやbashやzshやsedやawkもライブラリにしてほしいかも。ついでに言えば、Pythonもか。PerlやRubyはlibperl.soやlibruby.soがある。使ったことはないがさぞかし便利に違いない。libphp.soはApache HTTPD用のモジュールなんだろうな、たぶん。
そうか、もしlibphp.so(Apache HTTPDのモジュール)が普通にプログラムから使えるんだったらmod_python.soを使えばいいのか。