libbpf / bpftool

Automated upstream mirror for bpftool stand-alone build.
Other
377 stars 69 forks source link

missing zstd library when building statically on Ubuntu 24.04 #152

Open mtardy opened 4 weeks ago

mtardy commented 4 weeks ago

When building bpftool statically on Ubuntu 24.04 (note that it works fine on 22.04), -lzstd must be added to LIBS and BOOTSTRAP_LIBS. See my "live patch" https://github.com/cilium/tetragon/pull/2777/commits/8e994cf0bc2ad2ccd88ba9a490913052a1b9a825.

Would it make sense to upstream that? I would be happy to.

I have a repro, do the following steps with ubuntu:22.04 and ubuntu:24.04 (replace clang 15 with clang 18 on 24.04)

apt-get update && apt-get install -y --no-install-recommends clang-15 libclang-common-15-dev libclang-cpp15 libllvm15 llvm-15-linker-tools libclang1-15 llvm-15 llvm-15-runtime llvm-15-linker-tools make
apt-get update && apt-get install -y curl git llvm gcc pkg-config zlib1g-dev libelf-dev libcap-dev
git clone https://github.com/libbpf/bpftool.git
cd bpftool
git submodule update --init --recursive
make -C src EXTRA_CFLAGS=--static EXTRA_LDFLAGS=-v -j $(nproc) && strip src/bpftool
qmonnet commented 3 weeks ago

Thanks for the report! We'll need to update both the kernel and the mirror repo, independently. Do you have more context on the change, by any chance? Is there a way to figure out whether the -lzstd is required without having to add a new set of probes?

mtardy commented 3 weeks ago

Thanks for the report! We'll need to update both the kernel and the mirror repo, independently. Do you have more context on the change, by any chance? Is there a way to figure out whether the -lzstd is required without having to add a new set of probes?

Tbh I don't exactly know the "why", I just ended up finding that it fixed my issue when using the newer Ubuntu version. I could investigate to see!

petrutlucian94 commented 2 days ago

I hit the same problem, for what is worth zstd is required by libelf. It could be that older versions of libelf didn't use zstd.

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
(.text+0xd45): undefined reference to `ZSTD_decompress'
qmonnet commented 2 days ago

Yes. Elfutils commit a5b07cdf9c49 adds support for ZSTD compression, since elfutils 0.189.

Ubuntu 22.04 ships version 0.186 (or 0.188 in backports), Ubuntu 24.04 has 0.189 or 0.190 depending on the arch.