http://code.google.com/intl/ja/apis/protocolbuffers/docs/overview.html
Protocol BuffersはまだDebianパッケージにはなってないようなのでソースからビルドします。
ソースは以下から
http://code.google.com/p/protobuf/downloads/list
とりあえず現在最新バージョンの2.3.0を落として普通にビルドしてみます。
wget http://protobuf.googlecode.com/files/protobuf-2.3.0.tar.gz
tar xzf protobuf-2.3.0.tar.gz
cd protobuf-2.3.0
./configure
make
make check
sudo make install
以上がうまくいっていれば、
protoc --versionでバージョンが表示されるはずですが、どうやらライブラリのリンクがうまくいかないようです。
% protoc --version
protoc: error while loading shared libraries: libprotobuf.so.6: cannot open shared object file: No such file or directory
ちなみに使用環境は、
% uname -a
Linux chameleon 2.6.26-2-amd64 #1 SMP Thu Feb 11 00:59:32 UTC 2010 x86_64 GNU/Linux
こんな時は、make install した時に表示される以下のようなメッセージ従ってリンク先のパスを設定します。
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
上の方法の他に/libにシンボリックリンクを張ったりでもたぶん大丈夫ですが、バイナリファイルにリンク情報を埋め込んでやる方が安全です。
(本来は/etc/ld.so.conf で設定されているはず。当環境では/usr/local/lib をみるようにすで設定されてたけど、なぜかリンクエラーになる。原因不明。)
リンク情報を埋め込むには、MakefileのLDFLAGSの行に以下のようにしてリンカオプションを渡してやります。
LDFLAGS = -Wl,-rpath,/usr/local/lib
ちなみに、Makefileは複数ありますが、編集するのは protobuf-2.3.0/src/Makefile だけでOKです。
LDFLAGSを設定したらsrc以下だけ再度ビルド、protobuf-2.3.0/src/.libs/ 以下に生成されているバイナリをobjdumpして正しいRPATHが入っていればOKです。
$ objdump -p .libs/protoc | grep RPATH
RPATH /usr/local/lib
再度インストールして、きちんとバージョンがでればOKです。
$ protoc --version
libprotoc 2.3.0