[Armadillo:04214] Re: strace/tcpdumpのmakeエラー

mizo email@hidden
2009年 4月 23日 (木) 11:54:54 JST


溝渕です。

風我成 望 wrote:
> 溝渕さん
> 
>  風我成です。お世話になっております。
> 
>  色々調べてみましたが、そもそも基本的に現状の環境では
>  ライブラリが足りないように思います。
>  atmark-distの下を検索しても、
>  libncursesなど、今後必要そうなものも見つかりません。
前のメールでも書きましたが、

atmark-distのコンフィグレーションで、

(None) Libc Version

を選択した場合は、
/usr/arm-linux-gnu/
以下にインストールされているヘッダファイルや、ライブラリが優先的に使用さ
れます。

[PC ~]$ dpkg -l | grep libncurses | grep arm

とすると、クロスライブラリがインストールされているかどうかが確認できます。

インストールされていない場合は、
/etc/apt/sources.list
に
deb http://download.atmark-techno.com/debian etch/
という行があることを確認した後、

[PC ~]$ sudo apt-get update
[PC ~]$ sudo apt-get install libncurses5-dev-arm-cross

でインストールされます。

>  環境構築の際にはライブラリ選定がデフォルトがNoneでした。
>  libpcap等のバージョンアップも含めて、環境の変更をしてしまおうと
>  思うのですが、どれを選択したら良いでしょうか?glibcかとは思いますが。
> 
>  また、make configの再実行で現在までに構築した環境は
>  ライブラリ以外は変らないのでしょうか?(ちょこちょこと修正したりしましたので)
>  (Noneに対して追加なら全く問題ないと思いますが…) 
多分
(None) Libc Version
以外を選択するとビルドできなくなると思います。

ここで、Noneを選択すると、
「libcを使用しない」
ではなく、
「開発用PCにインストールされたglibcを使用する」
という意味になります。

[PC ~]$ dpkg -l | grep libc6 | grep arm
で、atmark-distのビルドの際に使用しているglibcのパッケージが確認できます。

クロスライブラリを追加する場合は、以下が参考になると思います。

[クロス開発用ライブラリをインストールする方法]
http://armadillo.atmark-techno.com/howto/install-cross-libraries

>  お手数ですが、お教え頂ければ助かります。
> 
>  よろしくお願いいたします。
>  
>  
> 09/04/22 (水曜日) 11:32AM、 "mizo" <email@hidden>のメッセージ:
>> 溝渕です。
>>
>> 風我成 望 wrote:
>>> 溝渕さん
>>>
>>>  風我成 です。 実施結果ですが、同じエラーになってしまいました。
>>>
>>>  make cleanを実施して.*的なファイルは無くなり、
>>>  再度のmakeでやはり実行権限が無かったので付与しましたが同じでした。
>>>  
>>>  libpcapのバージョンがatmark-dist/lib/libpcap内のREADMEによると0.4だったので、
>>>  crossの環境設定のミスかと思い、libpcap0.8-dev-arm-cross他と再度dpkgしましたが、
>>>  0.4のままで変わりませんでした…
>> atmark-distのコンフィグレーションで、
>>
>> (None) Libc Version
>>
>> を選択した場合は、
>> /usr/arm-linux-gnu/
>> 以下にインストールされているヘッダファイルや、ライブラリが優先的に使用さ
>> れます。
>>
>> また、atmark-distには、当社の製品のデフォルトでは使用していないいくつか
>> のアプリケーションが入っています。これらのアプリケーションはビルドができ
>> なかったり、正常に動作しない場合があります。
>>
>>>  以下、全体makeからさ以後の部分の抜粋です。
>>>  (成功した環境からstraceのみtcpdumpのみを追加状態で実施しました)
>>>  まだ、悩んでみますがアドバイス頂ければ助かります。
>>>
>>> make[3]: ディレクトリ `/atmark-dist/user/route/lib' から出ます
>>> make[2]: ディレクトリ `/atmark-dist/user/route' から出ます
>>> make[2]: ディレクトリ `/atmark-dist/user/strace' に入ります
>>> arm-linux-gcc  -Wall -DHAVE_CONFIG_H   -I. -Ilinux/arm -I./linux/arm -Ilinux -I./linux -O2 -I/usr/arm-linux/include -I/usr/lib/gcc/arm-linux-gnu/4.1.2//include -Dlinux -D__linux__ -Dunix -DEMBED -Wall -fno-common  -I/atmark-dist -D_GNU_SOURCE -D__USE_BSD -D__USE_POSIX199309 -DARM=1 -DHAVE_SYS_USER_H=1 -c file.c
>>> file.c: In function ‘realprintstat’:
>>> file.c:737: error: ‘struct stat’ has no member named ‘st_atim’
>>> file.c:738: error: ‘struct stat’ has no member named ‘st_mtim’
>>> file.c:739: error: ‘struct stat’ has no member named ‘st_ctim’
>> /usr/arm-linux-gnu/include/bits/stat.h
>> で定義されている、
>> # define st_atime st_atim.tv_sec
>> # define st_mtime st_mtim.tv_sec
>> # define st_ctime st_ctim.tv_sec
>> があるために、
>>
>> tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
>>>> tprintf("st_atime=%s, ", sprinttime(statbuf.st_atim.tv_sec));
>> になってエラーとなっているようです。
>>
>>
>> ビルドを行なうためには、これらの問題を解決する必要があります。
>>
>> バイナリを使用するだけでも構わない場合は、以下の手順が参考になると思います。
>>
>> [Debianのパッケージに含まれるコンパイル済みのバイナリをArmadilloで動作さ
>> せる方法]
>> http://armadillo.atmark-techno.com/howto/use-debian-binary
>>
>>
>>> file.c: In function ‘convertoldstat’:
>>> file.c:915: error: ‘struct stat’ has no member named ‘st_atim’
>>> file.c:915: error: ‘const struct __old_kernel_stat’ has no member named ‘st_atim’
>>> file.c:916: error: ‘struct stat’ has no member named ‘st_mtim’
>>> file.c:916: error: ‘const struct __old_kernel_stat’ has no member named ‘st_mtim’
>>> file.c:917: error: ‘struct stat’ has no member named ‘st_ctim’
>>> file.c:917: error: ‘const struct __old_kernel_stat’ has no member named ‘st_ctim’
>>> make[2]: *** [file.o] エラー 1
>>> make[2]: ディレクトリ `/atmark-dist/user/strace' から出ます
>>> make[1]: *** [all] エラー 2
>>> make[1]: ディレクトリ `/atmark-dist/user' から出ます
>>> make: *** [subdirs] エラー 1
>>> email@hidden:/atmark-dist$
>>>
>>> make[2]: ディレクトリ `/atmark-dist/lib/libpcap' に入ります
>>> arm-linux-gcc  -O2 -fno-common -Wall  -I/usr/arm-linux/include -I/usr/lib/gcc/arm-linux-gnu/4.1.2//include -fno-builtin -nostdinc -I/atmark-dist/include -idirafter /atmark-dist/include/include -Dlinux -D__linux__ -Dunix  -I.  -Ilinux-include -DEMBED=1 -DHAVE_MALLOC_H=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./pcap-linux.c
>>> In file included from /usr/arm-linux/include/malloc.h:44,
>>> from ./pcap-linux.c:42:
>>> /usr/lib/gcc/arm-linux-gnu/4.1.2//include/stddef.h:414:1: warning: "offsetof" redefined
>>> In file included from /usr/arm-linux/include/linux/posix_types.h:4,
>>> from /usr/arm-linux/include/linux/types.h:8,
>>> from /usr/arm-linux/include/linux/if_ether.h:24,
>>> from ./pcap-linux.c:37:
>>> /usr/arm-linux/include/linux/stddef.h:17:1: warning: this is the location of the previous definition
>>> ./pcap-linux.c: In function ‘pcap_read’:
>>> ./pcap-linux.c:88: warning: pointer targets in passing argument 6 of ‘recvfrom’ differ in signedness
>>> ./pcap-linux.c: At top level:
>>> ./pcap-linux.c:142: error: conflicting types for ‘pcap_open_live’
>>> /usr/arm-linux/include/pcap.h:221: error: previous declaration of ‘pcap_open_live’ was here
>>> make[2]: *** [pcap-linux.o] エラー 1
>>> make[2]: ディレクトリ `/atmark-dist/lib/libpcap' から出ます
>>> make[1]: *** [all] エラー 2
>>> make[1]: ディレクトリ `/atmark-dist/lib' から出ます
>>> make: *** [subdirs] エラー 1
>>> email@hidden:/atmark-dist$
>>>  
>>>
>>>  
>>>
>>>  
>>> 09/04/21 (火曜日) 07:30PM、 "風我成 望" <email@hidden>のメッセージ:
>>>> 溝渕さん
>>>>
>>>>  風我成 です。 コメントありがとうございますです。
>>>>  環境情報も不足で申し訳ないです。(コピペ抜けですm(_ _)m)
>>>>
>>>>> cron, lspciはすでにatmark-distに存在するものを使用しましたか?
>>>>> それとも自分でatmark-distに組み込んだものでしょうか?
>>>>  atmark-dist内のものです。
>>>>  無線ドライバ以外は、そのまま使おうとしています。
>>>>
>>>>> lspciに関してはArmadilloにはデフォルトで含まれていませんが、busyboxの
>>>>> crondに関してはビルドを確認しています。
>>>>  busybox内にありましたか…気付きませんでした。
>>>>  cronはCore Applicationから
>>>>  lspciはMiscellaneous Applicationから(straceも)
>>>>  TcpdumpはNetwork Applicationから選択しました。
>>>>
>>>>> また、メーリングリストへ投稿される場合は、
>>>>  大変失礼しましたm(_ _)m 
>>>>
>>>>> - atmark-distやlinux-kernelのバージョン
>>>>  2.6.18-at2です。
>>>>
>>>>> - ATDE2のバージョン
>>>>  2.0.0です。
>>>>
>>>>> - 使用しているボード(Armadillo-500等)
>>>>  Armadillo-500です。
>>>>
>>>>>> strace のmakeのエラー 
>>>>>> 以下のような宣言のエラーが出ます。ユーザーランド全体でも、 
>>>>>> 単体でも同じエラーが出ます。 
>>>>>> 使用していない[st_atim]が無いというエラーですが、 
>>>>>> file.cの中には[st_atime]はありますが、[st_atim]は使われてません。 
>>>>>>
>>>>>> email@hidden:/atmark-dist/user/strace$ vi Makefile 
>>>>>> email@hidden:/atmark-dist/user/strace$ make 
>>>>> atmark-dist/Makefile
>>>>> を経由しないでビルドした場合、いくつかのMakefile内の変数が定義されません。
>>>>>
>>>>> この場合ですと、arm-linux-gccが呼ばれずに、PCのコンパイラが使用されてい
>>>>> ます。
>>>>  えと、そうだと思います。
>>>>  ただ、単体エラーと、上記のatmark-distでのmakeでのエラーが同じだったのを
>>>>  確認しただけでした。
>>>>
>>>>> すでにオブジェクトファイル等が生成されてある可能性があるため、一度clean
>>>>> することをおすすめします。
>>>>  make cleanが走らなかった記述なしで走らなかった
>>>>  ような気がしましたが、リトライしてみます。
>>>>
>>>>>> cc -Wall -DHAVE_CONFIG_H   -I. -Ilinux/ -I./linux/ -Ilinux -I./linux -D_GNU_SOURCE -D__USE_BSD -D__USE_POSIX199309 -c file.c 
>>>>>> file.c: In function ‘realprintstat’: 
>>>>>> file.c:737: error: ‘struct stat’ has no member named ‘st_atim’ 
>>>>>> file.c:738: error: ‘struct stat’ has no member named ‘st_mtim’ 
>>>>>> file.c:739: error: ‘struct stat’ has no member named ‘st_ctim’ 
>>>>>> file.c: In function ‘convertoldstat’: 
>>>>>> file.c:915: error: ‘struct stat’ has no member named ‘st_atim’ 
>>>>>> file.c:915: error: ‘const struct __old_kernel_stat’ has no member named ‘st_atim’ 
>>>>>> file.c:916: error: ‘struct stat’ has no member named ‘st_mtim’ 
>>>>>> file.c:916: error: ‘const struct __old_kernel_stat’ has no member named ‘st_mtim’ 
>>>>>> file.c:917: error: ‘struct stat’ has no member named ‘st_ctim’ 
>>>>>> file.c:917: error: ‘const struct __old_kernel_stat’ has no member named ‘st_ctim’ 
>>>>>> make: *** [file.o] エラー 1 
>>>>>>
>>>>>> ユーザーランド全体で実施すると以下の文も出ますが、 
>>>>>> 下記の三つはわざとなのか実行権限が付与されてませんでした。 
>>>>>> 他の.*ファイルはすべて付いてます。 
>>>>>> make[2]: ディレクトリ `/atmark-dist/user/hwclock' から出ます 
>>>>>> /bin/sh: extensions/.dccp-test: 許可がありません 
>>>>>> /bin/sh: extensions/.layer7-test: 許可がありません 
>>>>>> /bin/sh: extensions/.statistic-test: 許可がありません 
>>>>> 実行権限の付与し忘れだと思われます。
>>>>>
>>>>> これらのスクリプトは呼び出されてはいますが、実行の結果何も行なわないため、
>>>>>
>>>>> - 実行権限を付与する
>>>>> - 上記3ファイルを削除する
>>>>>
>>>>> のどちらの対応でも構いません。
>>>>  今は動いていないので、実効権限を付与して試して見ます。
>>>>
>>>>>> ○tcpdump のmakeのエラー 
>>>>>>
>>>>>>
>>>>>> email@hidden:/atmark-dist/user/strace$ cd ../tcpdump/ 
>>>>>> email@hidden:/atmark-dist/user/tcpdump$ make 
>>>>> strace同様の対応をしてみてください。
>>>>>
>>>>> 上記対応を行なってもpcap.hが発見できない場合は、
>>>>> libpcap0.8-dev-arm-cross
>>>>> がインストールされているかどうかを確認してみてください。
>>>>  了解しました。大変助かります。
>>>>
>>>>  実施後、改めて報告いたします。
>>>>
>>>>  取り急ぎ。
>>>>
>>>>>> cc -I.  -Ilinux-include  -DHAVE_FCNTL_H=1 -DHAVE_MALLOC_H=1 -DHAVE_MEMORY_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_NET_SLIP_H=1 -DHAVE_VFPRINTF=1 -DHAVE_STRCASECMP=1 -DHAVE_SETLINEBUF=1 -DRETSIGTYPE=void -DRETSIGVAL= -D__USE_BSD=1 -c ./tcpdump.c 
>>>>>> ./tcpdump.c:43:18: error: pcap.h: そのようなファイルやディレクトリはありません 
>>>>>> ./tcpdump.c:78: warning: ‘struct bpf_program’ declared inside parameter list 
>>>>>> ./tcpdump.c:78: warning: its scope is only this definition or declaration, which is probably not what you want 
>>>>>> ./tcpdump.c:88: error: expected specifier-qualifier-list before ‘pcap_handler’ 
>>>>>> ./tcpdump.c:93: warning: excess elements in struct initializer 
>>>>>> 中略 
>>>>>> ./tcpdump.c:99: error: ‘DLT_FDDI’ undeclared here (not in a function) 
>>>>>> ./tcpdump.c:99: warning: excess elements in struct initializer 
>>>>>> 中略 
>>>>>> ./tcpdump.c:103: warning: excess elements in struct initializer 
>>>>>> ./tcpdump.c:103: warning: (near initialization for ‘printers[10]’) 
>>>>>> ./tcpdump.c:107: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘lookup_printer’ 
>>>>>> ./tcpdump.c:119: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
>>>>>> ./tcpdump.c: In function ‘main’: 
>>>>>> ./tcpdump.c:129: error: ‘bpf_u_int32’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:129: error: (Each undeclared identifier is reported only once 
>>>>>> ./tcpdump.c:129: error: for each function it appears in.) 
>>>>>> ./tcpdump.c:129: error: expected ‘;’ before ‘localnet’ 
>>>>>> ./tcpdump.c:131: error: ‘pcap_handler’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:131: error: expected ‘;’ before ‘printer’ 
>>>>>> ./tcpdump.c:132: error: storage size of ‘fcode’ isn’t known 
>>>>>> ./tcpdump.c:135: error: ‘PCAP_ERRBUF_SIZE’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:285: error: ‘pd’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:288: error: ‘localnet’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:289: error: ‘netmask’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:294: warning: assignment makes pointer from integer without a cast 
>>>>>> ./tcpdump.c:338: error: ‘pcap_dumper_t’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:338: error: ‘p’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:341: error: ‘printer’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:341: error: ‘pcap_dump’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c: In function ‘cleanup’: 
>>>>>> ./tcpdump.c:365: error: storage size of ‘stat’ isn’t known 
>>>>>> ./tcpdump.c:368: error: ‘pd’ undeclared (first use in this function) 
>>>>>> ./tcpdump.c:368: warning: comparison between pointer and integer 
>>>>>> ./tcpdump.c: At top level: 
>>>>>> ./tcpdump.c:439: warning: function definition has qualified void return type 
>>>>>> make: *** [tcpdump.o] エラー 1 
>>>>>> email@hidden:/atmark-dist/user/tcpdump$ 
>>>>>>
>>>>>>
>>>>>> 開発環境の中には、pcap.hは下記があり、上の三つは結局同じものでした。 
>>>>>>
>>>>>> email@hidden:/atmark-dist$ find ./ -name pcap.h 
>>>>>> ./include/include/pcap.h 
>>>>>> ./include/pcap.h 
>>>>>> ./lib/libpcap/pcap.h 
>>>>>> ./user/snort/src/win32/WIN32-Includes/WinPCAP/pcap.h 
>>>>>> ./user/nessus/nessus-libraries/libpcap-nessus/pcap.h 
>>>>>>
>>>>>> _______________________________________________
>>>>>> armadillo mailing list
>>>>>> email@hidden
>>>>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>>>>>
>>>>> _______________________________________________
>>>>> armadillo mailing list
>>>>> email@hidden
>>>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>>>>
>>>>>
>>>> _______________________________________________
>>>> armadillo mailing list
>>>> email@hidden
>>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>>>
>>>>
>>> _______________________________________________
>>> armadillo mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
>>
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 



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