tcpdump mailing list archives

Re: Re: compile failed when using pcap, "undefined reference to `pcap_set_datalink"


From: Jan Pomahač <honza () ekc cz>
Date: Fri, 28 Nov 2003 16:25:40 +0100

Hi Arthur,

if you want libpcap library installed into /usr/lib and headers into
/usr/include you should run

./configure --prefix=/usr

Try ./configure --help for more information.

Honza

----- Original Message ----- 
From: "Arthur Chen" <iamarthur60 () hotmail com>
To: <tcpdump-workers () tcpdump org>
Sent: Friday, November 28, 2003 2:21 PM
Subject: [tcpdump-workers] Re: compile failed when using pcap, "undefined
reference to `pcap_set_datalink"


Hi all,
    now I have found part of the error.
1) my system is redhat 9.0, and I installed pcap with these steps:
                root# ./configure
                root# ./make
                root# ./make install
   with these steps, in the Makefile's item 'install:', it showed out
these
things to do
           (a) copy libpcap.a to /usr/local/lib,
           (b)copy pcap.h, pcap-named.h pcap-bpf.h to /usr/local/include
2) It seems the 'configure' shell is wrong,
           (a) copy libpcap.a to /usr/local/lib,----this should be copy to
/usr/lib
           (b)copy pcap.h, pcap-named.h pcap-bpf.h to
/usr/local/include-----this is wrong, should be copy to /usr/include

3)But after I copied them to the correct place, I still can not compile,
the
error is still be:
"undefined reference to 'pcap_set_datalink'"
I have noticed that under the directory /usr/lib, there are several shared
library files called libpcap.so,
libpcap.so.0,libpcap.so.0.6,libpcap.so.0.6.2 , they might be the key
problem---because when I make and instal the new PCAP library, I didn't
see
that there were any of these files be createdl:

----anybody help me!






From: "Arthur Chen" <iamarthur60 () hotmail com>
To: tcpdump-workers () tcpdump org
Subject: [tcpdump-workers] small program compile failed when using pcap,
"undefined reference to `pcap_set"
Date: Thu, 27 Nov 2003 23:00:02 +0000

this small trying program can not compile, It said undefined reference to
`pcap_set_datalink', but this function prototype was included in pcap.h
and
was implemented in pcap.c! Any idea?

    This is the error message:

[root@ arthur]# gcc -lpcap -o pcap_test.o pcap_test.c
/tmp/ccViVFVU.o(.text+0xbb): In function `main':
: undefined reference to `pcap_set_datalink'
collect2: ld returned 1 exit status
[root@ arthur]#


     the source file is:

#include <stdio.h>
#include <pcap.h>
//#include <pcap_int.h>
extern int pcap_set_datalink(pcap_t *, int);
   int main()
   {
       pcap_t *handle;                       /* Session handle */
//      char *dev;                            /* The device to sniff on
*/
       char errbuf[PCAP_ERRBUF_SIZE];        /* Error string */
       struct bpf_program filter;            /* The compiled filter */
//      char filter_app[] = "port 23";        /* The filter expression */
       char filter_app[] = "ether[11]=0xcb || (ether[5]=0xcb)";
       bpf_u_int32 mask;                     /* Our netmask */
       bpf_u_int32 net;                      /* Our IP */
       struct pcap_pkthdr header;            /* The header that pcap
gives
us */
       const u_char *packet;                 /* The actual packet */
       /* Define the device */
//        dev = pcap_lookupdev(errbuf);
char dev[]="eth0";
int errCode=0;

bpf_u_int32 counter=0;
printf("the dev=%s\n",dev);

       /* Find the properties for the device */
       pcap_lookupnet(dev, &net, &mask, errbuf);
/* Open the session in promiscuous mode */
       handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf);
//printf("The data link is %d",(pcap_datalink(handle)));
pcap_set_datalink(handle, DLT_PPP_ETHER);

if (errCode)
printf("Set data link failed, error code=%d",errCode);
else
printf("Set data link succeeded, ");

/* Compile and apply the filter */
//        pcap_compile(handle, &filter, filter_app, 0, net);
       pcap_compile(handle, &filter, filter_app, 0, net);
pcap_setfilter(handle, &filter);
       /* Grab a packet */

packet = pcap_next(handle, &header);
       /* Print its length */
       printf("Jacked a packet with length of [%d]\n", header.len);
       /* And close the session */
for (; counter<header.len; counter++)
printf("%3x", *(packet+counter));

pcap_close(handle);

       return(0);
   }

_________________________________________________________________
Help STOP SPAM with the new MSN 8 and get 2 months FREE*
http://join.msn.com/?page=features/junkmail

-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use
mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe

_________________________________________________________________
The new MSN 8: advanced junk mail protection and 2 months FREE*
http://join.msn.com/?page=features/junkmail

-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use
mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe


-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe


Current thread: