J’essaie de comstackr ce programme C appelé Pirni , qui a été à l’origine conçu pour iPhone, et je voudrais le lancer sur Linux Ubuntu 12.04 LTS. C’est très court (3 fichiers C et 1 fichier en-tête). Mais je reçois les erreurs suivantes. J’ai libpcap-dev
installé et j’ai inclus -lpcap
donc je ne sais pas ce qui pourrait être faux.
gcc -Wall -pthread -lpcap pirni.c threads.c sniffer.c -o pirni -lnet pirni.c: In function 'set_forwarding': pirni.c:31:2: warning: implicit declaration of function 'sysctlbyname' [-Wimplicit-function-declaration] /tmp/cc3sf284.o: In function `set_forwarding': pirni.c:(.text+0xfd): undefined reference to `sysctlbyname' /tmp/ccvGjyMo.o: In function `processPacket': sniffer.c:(.text+0x1b): undefined reference to `pcap_dump' /tmp/ccvGjyMo.o: In function `initSniffer': sniffer.c:(.text+0xfa): undefined reference to `pcap_open_live' sniffer.c:(.text+0x15a): undefined reference to `pcap_lookupnet' sniffer.c:(.text+0x1af): undefined reference to `pcap_comstack' sniffer.c:(.text+0x1dd): undefined reference to `pcap_setfilter' sniffer.c:(.text+0x222): undefined reference to `pcap_dump_open' sniffer.c:(.text+0x27c): undefined reference to `pcap_loop' collect2: ld returned 1 exit status make: *** [main] Error 1
gcc -Wall -pthread -lpcap pirni.c threads.c sniffer.c -o pirni -lnet ^^^^^^
déplacez-le à la fin, afin que l’éditeur de liens sache quels symboles il doit lier.
Avec la bibliothèque où elle se trouve dans la ligne de commande, l’éditeur de liens voit que jusqu’à présent, il n’a pas besoin de symboles de libpcap
, donc l’ignore.
Dis-le:
gcc -Wall -pthread pirni.c threads.c sniffer.c -o pirni -lnet -lpcap # ^^^^^^^^^^^^
Les bibliothèques doivent être répertoriées après les unités de traduction locales. Votre manuel ld
vous expliquera en détail pourquoi (cela concerne la manière dont les symboles manquants sont recherchés et insérés).