[Armadillo:04016] Re: ipsec-toolsのmakeでエラー

Takenoshita Koyo email@hidden
2009年 2月 5日 (木) 17:56:13 JST


竹之下です。はじめまして。

> armadillo開発者サイト「IPSecを使用する:ipsec-toolsのコンパイル」を
> 参考に、VMWareの環境上でIPsec-toolsをビルドしようとするとmake中に
> 次のエラーが発生しました。
> <エラーメッセージ>
> /home/atmark/ipsec-tools-0.7.1/src/setkey/token.c:1965: undefined reference to `yywrap'
> collect2: ld returned 1 exit status
> 
> flex周りで、環境か手順が足りていなさそうにも思うのですが、
> どんな手順が必要でしょうか(例えば、次のような)。
>  ・flexを事前にビルドする?
>  ・下記(3)2 のconfigureで追加のオプションを指定する?
ご推察の通り、コンパイル時にflexのライブラリがリンクされていないので
エラーになっているようです。

色々やったので、正確な手順は不明ですが、
1. flexをarmクロス開発用に変換してインストールする
2. Makefile中のLEXLIBに-lflを指定する
で上手くいくようです。

== 1. について ==
基本的な手順は、「クロス開発用ライブラリをインストールする方法」にある通りです。
http://armadillo.atmark-techno.com/howto/install-cross-libraries
しかし、m4-arm-cross, m4-arm-dcv1に依存すると言われてインストール出来ません。

そこで、以下の回避策をとりました。
回避1:ファイルだけコピーしてしまう
[PC ~]$ dpkg-cross -a arm -b flex_2.5.33-11_arm.deb
[PC ~]$ mkdir tmp
[PC ~]$ dpkg -x flex-arm-cross_2.5.33-11_all.deb tmp
[PC ~]$ sudo cp -r tmp/* /

回避2: m4への依存関係を無視したパッケージを作る
[PC ~]$ dpkg-cross -a arm -b --exclude m4 flex_2.5.33-11_arm.deb
[PC ~]$ sudo dpkg -i flex-arm-cross_2.5.33-11_all.deb

但し、この方法はdpkg-crossのバージョンが新しいものでないと使えません。
ATDE2のDebian/etchに入っているdpkg-cross(1.29)では--excludeオプションは
サポートしていません。
Debian/lennyのdpkg-cross(2.3.3)では使えました。

※ Debian/lennyのVMWareイメージは、ATDE3 pre1で提供しています。
http://lists.atmark-techno.com/pipermail/armadillo/2008-November/003655.html
lennyでクロス開発用のパッケージだけ作成 -> etchに持ってきてインストール
ということをしました。

いずれにしても、スマートな方法ではないですね。

== 2. について ==
./configureを実行したあと、各階層のMakefileの以下の部分を修正して
flexのライブラリを参照するようにします。

LEXLIB =
を
LEXLIB = -lfl
に変更。

1.を先にやっておけば、もしかしたら必要ないのかもしれません。


以上で取り合えずコンパイルはできました。
動作確認はしていません。。

-- 
Koyo Takenoshita



armadillo メーリングリストの案内