Re: [PATCH] bpftool: Fix failure with static linkage

Stanislav Fomichev
2024-12-05T19:24:45Z

On 12/04, Leo Yan wrote:
> When building perf with static linkage:
>
> make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
> ...
> LINK /build/util/bpf_skel/.tmp/bootstrap/bpftool
> /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
> (.text+0x113): undefined reference to `ZSTD_createCCtx'
> /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
> /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
> /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
> /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
> /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
> /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
> /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
> /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
> /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
> /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
> /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
> (.text+0xbfc): undefined reference to `ZSTD_decompress'
> /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
> /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'
> /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
> collect2: error: ld returned 1 exit status
>
> Building bpftool with static linkage also fails with the same errors:
>
> make O=/build -C tools/bpf/bpftool/ V=1
>
> To fix the issue, explicitly link libzstd.
>
> Signed-off-by: Leo Yan <leo.yan@arm.com>
> ---
> tools/bpf/bpftool/Makefile | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> index a4263dfb5e03..65b2671941e0 100644
> --- a/tools/bpf/bpftool/Makefile
> +++ b/tools/bpf/bpftool/Makefile
> @@ -130,8 +130,8 @@ include $(FEATURES_DUMP)
> endif
> endif
>
> -LIBS = $(LIBBPF) -lelf -lz
> -LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz
> +LIBS = $(LIBBPF) -lelf -lz -lzstd
> +LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz -lzstd
> ifeq ($(feature-libcap), 1)
> CFLAGS += -DUSE_LIBCAP
> LIBS += -lcap
> --
> 2.34.1
>

I'm not sure we 'offically' support -static builds, but this seems to be
ok. Tangential: maybe time to switch to pkg-config for bpftool? IIRC,
there is some flag to query for static lib dependencies... Will leave
it up to Quentin.