1

pcap.h を使用する基本的なプログラムをコンパイルしようとしています。iPhone 3GS 用の iPhone 3.1.3 SDK を使用する Mac OSX ボックスで環境をセットアップしました。また、libpcap を ~/libpcap にインストールしたので、-I フラグを使用してヘッダーを探す場所を gcc に伝えることができます。ただし、ファイルが必要なアーキテクチャではないことを示す ld 警告で失敗します。

次の行でコンパイルしています。

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -I /Users/abnev/libpcap/include -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk -o pcap pcap.c -lpcap

生成されるエラーは次のとおりです。

ld: warning: in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk/usr/lib/libpcap.dylib, file is not of required architecture
Undefined symbols:
  "_pcap_geterr", referenced from:
      _main in ccOL3e0B.o
      _main in ccOL3e0B.o
  "_pcap_open_live", referenced from:
      _main in ccOL3e0B.o
  "_pcap_next", referenced from:
      _main in ccOL3e0B.o
  "_pcap_lookupdev", referenced from:
      _main in ccOL3e0B.o
  "_pcap_setfilter", referenced from:
      _main in ccOL3e0B.o
  "_pcap_lookupnet", referenced from:
      _main in ccOL3e0B.o
  "_pcap_close", referenced from:
      _main in ccOL3e0B.o
  "_pcap_compile", referenced from:
      _main in ccOL3e0B.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

armv6 アーキテクチャ (iPhone) 用に libpcap を再コンパイルする必要があると思いますが、./configure オプションをチェックしても役に立ちません。私はこれについてグーグルで検索しようとしましたが、そこにはほとんどありません。

4

1 に答える 1

4

pcap.clibpcap のソースではなく、libpcapのソース ファイルの1 つです。すべてのソース ファイルをコンパイルしてライブラリにビルドする必要があります。

やっている

CFLAGS="-I /Users/abnev/libpcap/include -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk" ./configure

iOS 用の libpcap をクロスコンパイルする Makefile を生成する可能性があります。

libpcapがBPFデバイスを開くことができるようにするには、ルートアクセスが必要になるため、少なくともパケットをキャプチャする場合は、libpcapまたはそれを使用して構築されたアプリケーションをジェイルブレイクされたiPhoneにインストールすることになると思います捕獲できるように。

于 2011-07-26T05:37:28.860 に答える