tcpdump mailing list archives
Re: Cannot find -lpcap when statically compiling a C project
From: Guy Harris <guy () alum mit edu>
Date: Thu, 19 Nov 2015 15:52:19 -0800
On Nov 19, 2015, at 3:29 PM, liu wen <caonimagongling () gmail com> wrote:
I want to statically compile a C project in a laptop(fedora), using command line like: gcc -o myprogram -static main.c ... -levent -lpcap but I get error: /usr/bin/ld: cannot find -lpcap /usr/bin/ld: cannot find -lc I tried to locate libpcap.a and find no such a file
See if there are libpcap RPMs that you haven't installed, perhaps one with a name like "libpcap-dev" or something with "-dev" in the name, although usually "-dev" packages include both static libraries and header files, so without the "-dev" package you won't be able to compile anything. Perhaps Fedora has separate packages for the libpcap runtime (shared libraries), libpcap development (headers), and libpcap static libraries. However, "cannot find -lc" means it also doesn't have a static version of libc, so you'll also have to find a Fedora package with a static version of libc.
if I compile dynamically, it successfully produces an executable ldd relay linux-vdso.so.1 => (0x00007fff4bfaf000) libevent-1.4.so.2 => /lib/libevent-1.4.so.2 (0x00007f14053a5000) libpcap.so.1 => /lib64/libpcap.so.1 (0x00000035b4a00000) libc.so.6 => /lib64/libc.so.6 (0x00000035b0a00000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00000035cea00000) librt.so.1 => /lib64/librt.so.1 (0x00000035b1a00000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00000035b2e00000) /lib64/ld-linux-x86-64.so.2 (0x00000035b0200000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00000035b1600000) This executable only works in this laptop.
Probably because either 1) the other laptops are running the same version of Fedora but don't have all those shared libraries installed or 2) they're running some other OS, so that the libraries have different pathnames. As far as I know, there's not much binary compatibility between different Linux distributions for anything other than programs with no dynamic libraries; there *might* be some level of binary compatibility allowing software compiled for older versions of a distribution to run on newer versions.
If I compile the project in other laptops, it doesn't work properly(the libpcap can't capture all packets successfully, I don't know why).
I.e., if you compile it on another machine, it doesn't even work on *that* machine? What does "tcpdump -h" print on the laptop where the build works and on the laptops where it doesn't? _______________________________________________ tcpdump-workers mailing list tcpdump-workers () lists tcpdump org https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers
Current thread:
- Cannot find -lpcap when statically compiling a C project liu wen (Nov 19)
- Re: Cannot find -lpcap when statically compiling a C project Guy Harris (Nov 19)
- Re: Cannot find -lpcap when statically compiling a C project liu wen (Nov 19)
- Re: Cannot find -lpcap when statically compiling a C project Guy Harris (Nov 19)
- Re: Cannot find -lpcap when statically compiling a C project Jamie Bainbridge (Nov 20)
- Re: Cannot find -lpcap when statically compiling a C project Guy Harris (Nov 20)
- Re: Cannot find -lpcap when statically compiling a C project liu wen (Nov 20)
- Re: Cannot find -lpcap when statically compiling a C project Jamie Bainbridge (Nov 20)
- Re: Cannot find -lpcap when statically compiling a C project liu wen (Nov 19)
- Re: Cannot find -lpcap when statically compiling a C project Guy Harris (Nov 19)