2014-11-24 23 views
5

Sto cercando di passare attraverso questo tutorial: http://www.tcpdump.org/pcap.htmlfunzioni PCAP hanno "undefined reference"

Ora devo installare pcap (suggerimenti sul codice e tutto ciò che sta lavorando) utilizzando:

sudo apt-get install libpcap-dev 

e finora ho il seguente codice (nome del file è example_pcap.c):

#include <stdio.h> 
#include <pcap.h> 

int main(int argc, char *argv[]) { 
    char *dev, errbuf[PCAP_ERRBUF_SIZE]; 

    dev = pcap_lookupdev(errbuf); 

    return 0; 
} 

Secondo molte domande che ho visto già hanno detto compilarlo usando questo:

gcc -lpcap example_pcap.c -o example_pcap 

Tuttavia ancora ottengo il seguente errore:

example_pcap.c:(.text+0x32): undefined reference to `pcap_lookupdev' 
+1

@NTN 1. errori del linker sono solitamente estranei a file di intestazione e 2. il messaggio di errore è ** non ** "libreria non trovata". Il problema è che la libreria è nel posto sbagliato - dovrebbe essere * dopo * il file sorgente. –

+0

Ohh sì, potresti usare -L/tuo/percorso/per aggiungere un nuovo percorso per localizzare lib –

risposta

12

Spostare -lpcap alla fine della riga di comando

Vedi Why does the order in which libraries are linked sometimes cause errors in GCC?

+1

Come in 'gcc example_pcap.c -o example_pcap -lpcap' (Ho aggiunto -o per ottenere un eseguibile con un nome migliore di' a.out') – Jite

+0

Questo ha funzionato ma ora sono un po 'confuso. Come parte dei miei corsi mi hanno già dato il file make. Ora il file make ha il parametro -lpcap PRIMA del resto. Hanno fatto un errore, o c'è un modo per assicurarsi che rimanga all'inizio? –

+0

collegamento ../build/idsniff gcc -lpcap -lpthread -o ../build/idsniff ../build/analysis.o ../build/dispatch.o ../build/main.o ../build /sniff.o ../build/sniff.o: nella funzione 'sniff ': /home/yahya/workspace/osCoursework/src/sniff.c:15: riferimento non definito a' pcap_open_live' /home/yahya/workspace/osCoursework/src/sniff.c: 27: riferimento non definito a 'pcap_next ' /home/yahya/workspace/osCoursework/src/sniff.c:31: riferimento non definito a' pcap_geterr' –