2011/11/07

[boost]リンクの順番か・・・

cygwinで、同じソースをビルドしてみた。

$ g++ -o tst -lboost_regex-mt regex.cpp

これならできるだろう・・・できない。
やはりリンクエラーになる。

ふっと思い立って、こうしてみた。

$ g++ -o tst regex.cpp -lboost_regex-mt

あ、通った。

Ubuntuに戻って、同じことをしてみた。
・・・通る。
そういうことか・・・・。

つまり、do_assign()はヘッダにあるけれども、やはりライブラリが必要なのだ。
nmで確認したが、do_assign()は「U(ndefined)」のままだった。
shared libraryでリンクされるから、そのままになっているのだろう。
-staticで静的にリンクさせて確認しようとしたが、あれやこれや無いと言われたので、やめた。

gccの場合、順番にリンクするんだったと思う。
標準ライブラリなんかは、書かなくても自動でリンクするんだけど、あれは一番最後に追加されていたんだったはず。


んで、一方のmayu。
Makefile.inを書き換えれば済むかと思ったけど、うまくいかん。

$ LIBS=-lboost_regex ./configure
$ make
$ sudo make install


Makefileを見ると、リンクの最後に$(LIBS)を見ていたのだ。
逃げた私を許して・・・。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。