rust-pcap / pcap

Rust language pcap library
Apache License 2.0
595 stars 138 forks source link

Build fails on "cannot find -lpcap" #307

Closed mrosi closed 5 months ago

mrosi commented 10 months ago

Hi, I've installed libpcap-devel , but still I'm not able to build, while it fails on:

note: /usr/bin/ld: cannot find -lpcap
          collect2: error: ld returned 1 exit status

my environment is:

[mrosi@developer testcapture]$ ll /usr/lib64/libpcap*
lrwxrwxrwx. 1 root root     12 Aug 10  2021 /usr/lib64/libpcap.so -> libpcap.so.1
lrwxrwxrwx. 1 root root     17 Aug 10  2021 /usr/lib64/libpcap.so.1 -> libpcap.so.1.10.0
-rwxr-xr-x. 1 root root 319688 Aug 10  2021 /usr/lib64/libpcap.so.1.10.0

[mrosi@developer testcapture]$ pkg-config --list-all | grep libpcap
libpcap                        libpcap - Platform-independent network traffic capture library

[mrosi@developer testcapture]$ cat /etc/os-release
NAME="CentOS Stream"
VERSION="9"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="9"
PLATFORM_ID="platform:el9"
PRETTY_NAME="CentOS Stream 9"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:centos:centos:9"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"

[mrosi@developer testcapture]$ $ rpm -qa | grep libpcap
libpcap-1.10.0-4.el9.x86_64
libpcap-devel-1.10.0-4.el9.x86_64

[mrosi@developer testcapture]$ cargo --version
cargo 1.72.0 (103a7ff2e 2023-08-15)

[mrosi@developer testcapture]$ rustup --version
rustup 1.26.0 (5af9b9484 2023-04-05)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.72.0 (5680fa18f 2023-08-23)`

Thank you for any help

stappersg commented 10 months ago

On Wed, Sep 06, 2023 at 12:07:00PM -0700, mrosi wrote:

Hi, I've installed libpcap-devel , but still I'm not able to build, while it fails on:

note: /usr/bin/ld: cannot find -lpcap
          collect2: error: ld returned 1 exit status
echo $PATH
echo lib
echo $LIBPATH

Acutaly: I liked the good bugreport.

Regards Geert Stappers Fooly^WFully aware that github.com doesn't render this email.

mrosi commented 10 months ago
$ echo $PATH
/home/mrosi/.cargo/bin:/home/mrosi/.local/bin:/home/mrosi/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

$LIBPATH is not defined

  = note: LC_ALL="C" PATH="/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin/self-contained:/home/mrosi/.cargo/bin:/home/mrosi/.local/bin:/home/mrosi/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin" VSLANG="1033" "cc" "-m64" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/rcrt1.o" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crti.o" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtbeginS.o" "/tmp/rustcM6udFX/symbols.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.18aymltgoqv9w6ws.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.1digqqvygdp6uihk.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.1ka56uu5bpzrju7p.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.2imi1g536w3wh1w0.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.2wii3hc90mnsh1nj.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.38bz0wnrpfaydkb2.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.4as1yp0rxzqdllus.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.4c1k321ckpjyjaco.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.4u8duqtq4gwgf6ys.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.50hjoon4chp5hnx6.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.ewqcresracn1jmv.rcgu.o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92.4qrm7uqgevdga2ie.rcgu.o" "-Wl,--as-needed" "-L" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps" "-L" "/home/mrosi/devel/rust/testcapture/target/debug/deps" "-L" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib" "-Wl,-Bstatic" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/libpcap-9a8c407c5d2ff051.rlib" "-lpcap" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/liberrno-71e636aa0419364a.rlib" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/liblibc-c60beef577024dea.rlib" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/libbitflags-3ccadcd1b6983207.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libstd-aa8203b3ba116fbe.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libpanic_unwind-e885f15b059e3ff7.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libobject-b65ca09827f11530.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libmemchr-5f4e25955e9c1b6c.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libaddr2line-3ca6169a8334e9b8.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libgimli-c89c6a6abb5921a6.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_demangle-984e152fe5af2cfb.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libstd_detect-51bdc4aec4b19e4b.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libhashbrown-1b5a9e52048e56da.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_alloc-6be8b5513d267adf.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libminiz_oxide-03a7cfa9b23d7126.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libadler-a08b13570cc48c0f.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libunwind-7785e052251c01d4.rlib" "-lunwind" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcfg_if-ee6e758db2a8c4d4.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/liblibc-994f69313f2f437a.rlib" "-lc" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/liballoc-a596098a302de5a5.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_core-96eda9db8ac002a3.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcore-2ab10af40e6ef36d.rlib" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcompiler_builtins-a69552e2f51a1d90.rlib" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-nostartfiles" "-L" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib" "-L" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained" "-o" "/home/mrosi/devel/rust/testcapture/target/x86_64-unknown-linux-musl/debug/deps/testcapture-db52ffac66526d92" "-Wl,--gc-sections" "-static-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtendS.o" "/home/mrosi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtn.o"
  = note: /usr/bin/ld: cannot find -lpcap
          collect2: error: ld returned 1 exit status
stappersg commented 10 months ago

On Wed, Sep 06, 2023 at 12:53:09PM -0700, mrosi wrote:

$LIBPATH is not defined

https://en.wikipedia.org/wiki/Environment_variable has

$LD_LIBRARY_PATH On many Unix systems with a dynamic linker, contains a colon-separated list of directories that the dynamic linker should search for shared objects when building a process image after exec, before searching in any other directories.

$LIBPATH or $SHLIB_PATH Alternatives to $LD_LIBRARY_PATH typically used on older Unix versions.

Regards Geert Stappers Did learn today that LIBPATH got a successor -- Silence is hard to parse

mrosi commented 10 months ago

None of them is defined. Not sure it will help - I've expanded "note" returned in the error /included above/ and libpcap-*.rlib is present in the list and on disk as well; additionally there is flag -lpcap

Wojtek242 commented 10 months ago

@mrosi - not really sure what's happening. My best guess ATM is that the pkg-config code in build.rs is not picking up the location of the library. Can you try setting the environment variable LIBPCAP_LIBDIR=/usr/lib64/ when compiling? I am not sure if this will work, but if it does then I think I know what's wrong.

mrosi commented 10 months ago

@Wojtek242 - I've checked two ways:

  1. export LIBPCAP_LIBDIR=/usr/lib64/
  2. set LIBPCAP_LIBDIR = "/usr/lib64/" in config.toml

but without any impact

Wojtek242 commented 10 months ago

That was all the ideas I had. At least from the point of view of this crate. Are you able to link with libpcap in another language? E.g. a simple few line C or C++ project on that same machine/os?

mrosi commented 10 months ago

I've successfuly compiled and excuted this example

Payn commented 8 months ago

@mrosi did you by any chance solve this issue since?

Having the same problem, also on CentOS (7). Only difference for me is that my pcap version is 1.5.3 and pkg-config --list-all doesn't list pcap. None of the ideas posted here worked for me.

mrosi commented 8 months ago

@Payn , no I've moved to other packet manipulation library

Wojtek242 commented 5 months ago

Closing as stale issue. If somebody else has similar problems, please re-open and comment with details and logs of your problem.