2010-06-18 26 views
1

Essayant de compiler un programme de base utilisant pcap.h. J'ai mis en place l'environnement sur ma boîte Mac OSX qui utilise le SDK iPhone 3.1.3 pour un iPhone 3GS. J'ai aussi installé libpcap dans ~/libpcap pour que je puisse dire à gcc où chercher les en-têtes en utilisant le drapeau -I. Cependant, il échoue avec un avertissement ld indiquant que le fichier n'est pas de l'architecture requise.Est-ce que libpcap peut être compilé pour iPhone/armv6?

Je compile avec la ligne suivante:

/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 

l'être erreur générés sont:

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 

Je suppose maintenant que je dois recompiler libpcap pour l'architecture ARMv6 (iPhone), mais la vérification les options ./configure n'aident pas. J'ai essayé de Google autour pour cela, mais il y a très peu de choses là-bas.

Répondre

4

pcap.c n'est pas la source de libpcap, c'est un des fichiers source à libpcap. Vous devez compiler tous les fichiers source et les construire dans une bibliothèque.

Faire

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

pourrait produire un Makefile qui cross-compiler libpcap pour iOS. Je suppose que vous allez installer libpcap, ou l'application créée en l'utilisant, sur un iPhone jailbreaké, au moins si vous allez capturer des paquets, car vous auriez besoin d'un accès root pour que libpcap puisse ouvrir un périphérique BPF afin de pouvoir capturer.