Comment réparer les erreurs de l’éditeur de liens “non définies” qui surviennent malgré le passage des indicateurs corrects?

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).