Message ID | 20241204213059.2792453-1-leo.yan@arm.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | BPF |
Headers | show |
Series | bpftool: Fix failure with static linkage | expand |
Hi Leo, On Wed, Dec 04, 2024 at 09:30:59PM +0000, 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. I was about to report exactly the same. :) > > Signed-off-by: Leo Yan <leo.yan@arm.com> Tested-by: Namhyung Kim <namhyung@kernel.org> Thanks, Namhyung > --- > 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 >
2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org> > Hi Leo, > > On Wed, Dec 04, 2024 at 09:30:59PM +0000, 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. > > I was about to report exactly the same. :) Thank you both. This has been reported before [0] but I didn't find the time to look into a proper fix. The tricky part is that static linkage works well without libzstd for older versions of elfutils [1], but newer versions now require this library. Which means that we don't want to link against libzstd unconditionally, or users trying to build bpftool may have to install unnecessary dependencies. Instead we should add a new probe under tools/build/feature (Note that we already have several combinations in there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's the best approach in terms of new combinations). Thanks, Quentin [0] https://github.com/libbpf/bpftool/issues/152 [1] https://github.com/libbpf/bpftool/issues/152#issuecomment-2343131810
Hello, On Wed, Dec 04, 2024 at 10:08:15PM +0000, Quentin Monnet wrote: > 2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org> > > Hi Leo, > > > > On Wed, Dec 04, 2024 at 09:30:59PM +0000, 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. > > > > I was about to report exactly the same. :) > > Thank you both. This has been reported before [0] but I didn't find the > time to look into a proper fix. > > The tricky part is that static linkage works well without libzstd for > older versions of elfutils [1], but newer versions now require this > library. Which means that we don't want to link against libzstd > unconditionally, or users trying to build bpftool may have to install > unnecessary dependencies. Instead we should add a new probe under > tools/build/feature (Note that we already have several combinations in > there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's > the best approach in terms of new combinations). I think you can use pkg-config if available. $ pkg-config --static --libs libelf -lelf -lz -lzstd -pthread Thanks, Namhyung > > [0] https://github.com/libbpf/bpftool/issues/152 > [1] https://github.com/libbpf/bpftool/issues/152#issuecomment-2343131810
2024-12-04 14:25 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org> > Hello, > > On Wed, Dec 04, 2024 at 10:08:15PM +0000, Quentin Monnet wrote: >> 2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org> >>> Hi Leo, >>> >>> On Wed, Dec 04, 2024 at 09:30:59PM +0000, 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. >>> >>> I was about to report exactly the same. :) >> >> Thank you both. This has been reported before [0] but I didn't find the >> time to look into a proper fix. >> >> The tricky part is that static linkage works well without libzstd for >> older versions of elfutils [1], but newer versions now require this >> library. Which means that we don't want to link against libzstd >> unconditionally, or users trying to build bpftool may have to install >> unnecessary dependencies. Instead we should add a new probe under >> tools/build/feature (Note that we already have several combinations in >> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's >> the best approach in terms of new combinations). > > I think you can use pkg-config if available. > > $ pkg-config --static --libs libelf > -lelf -lz -lzstd -pthread > That's another dependency that I'd like to avoid if I can :) Quentin
On Wed, Dec 04, 2024 at 10:55:32PM +0000, Quentin Monnet wrote: [...] > >>> I was about to report exactly the same. :) > >> > >> Thank you both. This has been reported before [0] but I didn't find the > >> time to look into a proper fix. > >> > >> The tricky part is that static linkage works well without libzstd for > >> older versions of elfutils [1], but newer versions now require this > >> library. Which means that we don't want to link against libzstd > >> unconditionally, or users trying to build bpftool may have to install > >> unnecessary dependencies. Instead we should add a new probe under > >> tools/build/feature (Note that we already have several combinations in > >> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's > >> the best approach in terms of new combinations). > > > > I think you can use pkg-config if available. > > > > $ pkg-config --static --libs libelf > > -lelf -lz -lzstd -pthread > > That's another dependency that I'd like to avoid if I can :) Seems to me, pkg-config is the right tool for doing such kind thing - not only it is nature for local building, it is also friendly for build system (e.g. buildroot, OpenEmbedded / Yocto). Though I have no deep knowledge for building. I am a bit confused why this issue is related to build features libbfd, libbfd-liberty, libbfd-liberty-z. Should not the issue is related to libelf? build/feature has several libelf checking, maybe we can add new one libelf-zstd? Thanks, Leo
2024-12-05 10:23 UTC+0000 ~ Leo Yan <leo.yan@arm.com> > On Wed, Dec 04, 2024 at 10:55:32PM +0000, Quentin Monnet wrote: > > [...] > >>>>> I was about to report exactly the same. :) >>>> >>>> Thank you both. This has been reported before [0] but I didn't find the >>>> time to look into a proper fix. >>>> >>>> The tricky part is that static linkage works well without libzstd for >>>> older versions of elfutils [1], but newer versions now require this >>>> library. Which means that we don't want to link against libzstd >>>> unconditionally, or users trying to build bpftool may have to install >>>> unnecessary dependencies. Instead we should add a new probe under >>>> tools/build/feature (Note that we already have several combinations in >>>> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's >>>> the best approach in terms of new combinations). >>> >>> I think you can use pkg-config if available. >>> >>> $ pkg-config --static --libs libelf >>> -lelf -lz -lzstd -pthread >> >> That's another dependency that I'd like to avoid if I can :) > > Seems to me, pkg-config is the right tool for doing such kind thing - > not only it is nature for local building, it is also friendly for build > system (e.g. buildroot, OpenEmbedded / Yocto). Though I have no deep > knowledge for building. pkg-config would be nice but is not always installed by default. We've been handling build options without it so far, if we can fix the current issue without struggling too much with probes I'd just as well avoid adding a build dependency. > I am a bit confused why this issue is related to build features libbfd, > libbfd-liberty, libbfd-liberty-z. Should not the issue is related to > libelf? build/feature has several libelf checking, maybe we can add new > one libelf-zstd? Apologies, I was the one getting confused. You're correct, this affects libelf and not libbfd, and yes libelf-zstd is likely the way to go. Thank you, Quentin
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.
On Wed, Dec 4, 2024 at 2:08 PM Quentin Monnet <qmo@kernel.org> wrote: > > 2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org> > > Hi Leo, > > > > On Wed, Dec 04, 2024 at 09:30:59PM +0000, 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. > > > > I was about to report exactly the same. :) > > Thank you both. This has been reported before [0] but I didn't find the > time to look into a proper fix. > > The tricky part is that static linkage works well without libzstd for > older versions of elfutils [1], but newer versions now require this > library. Which means that we don't want to link against libzstd > unconditionally, or users trying to build bpftool may have to install > unnecessary dependencies. Instead we should add a new probe under > tools/build/feature (Note that we already have several combinations in > there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's > the best approach in terms of new combinations). > So what's the conclusion here? Do we apply this as a fix, or someone needs to add more feature probing? > Thanks, > Quentin > > > [0] https://github.com/libbpf/bpftool/issues/152 > [1] https://github.com/libbpf/bpftool/issues/152#issuecomment-2343131810
Hi Andrii, On Tue, Dec 10, 2024 at 10:26:22AM -0800, Andrii Nakryiko wrote: [...] > > The tricky part is that static linkage works well without libzstd for > > older versions of elfutils [1], but newer versions now require this > > library. Which means that we don't want to link against libzstd > > unconditionally, or users trying to build bpftool may have to install > > unnecessary dependencies. Instead we should add a new probe under > > tools/build/feature (Note that we already have several combinations in > > there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's > > the best approach in terms of new combinations). > > > > So what's the conclusion here? Do we apply this as a fix, or someone > needs to add more feature probing? I am working on a new build feature. Based on that, it will refine for perf build and bpftool build. Once get ready, I will send out for review. Thanks, Leo
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
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(-)