Andrii Nakryiko wrote: > On Sat, Sep 24, 2022 at 3:13 AM Xin Liu <liuxin350@xxxxxxxxxx> wrote: > > > > Some programs depned on libbpf.a(eg:bpftool). If libbpf.a miss -fPIC, > > this will cause a similar error at compile time: > > > > /usr/bin/ld: .../libbpf.a(libbpf-in.o): relocation > > R_AARCH64_ADR_PREL_PG_HI21 against symbol `stderr@@GLIBC_2.17' which > > may bind externally can not be used when making a sharedobject; > > recompile with -fPIC > > > > Use -fPIC for static library compilation to solve this problem. > > > > Signed-off-by: Xin Liu <liuxin350@xxxxxxxxxx> > > --- > > tools/lib/bpf/Makefile | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile > > index 4c904ef0b47e..427e971f4fcd 100644 > > --- a/tools/lib/bpf/Makefile > > +++ b/tools/lib/bpf/Makefile > > @@ -91,9 +91,10 @@ override CFLAGS += $(INCLUDES) > > override CFLAGS += -fvisibility=hidden > > override CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 > > override CFLAGS += $(CLANG_CROSS_FLAGS) > > +override CFLAGS += -fPIC > > > > It seems wrong to force -fPIC for static library just because in some > situations users might want to statically link their *shared* library > with *static* libbpf. It's a bit unconventional, even though I see > situations in which this might be useful. > > But I don't think this can be a default. I see three possible solutions: > > 1. Do nothing. Let users specify EXTRA_CFLAGS=-fPIC if they need > position-independent static lib > 2. Let packagers decide this (again, through EXTRA_CFLAGS or by > patching Makefile, whichever is best). Or maybe build both PIC and > non-PIC static libraries and package both? > 3. Produce PIC and non-PIC libbpf.a libraries from libbpf's Makefile. > > I'm not sure which one is the best answer, would be nice to hear > opinions of people who do the packaging and distribution of libbpf in > distros. Not a distro or pkg maintainer but my $.02 is I would just leave it for 1 and 2. > > > # flags specific for shared library > > -SHLIB_FLAGS := -DSHARED -fPIC > > +SHLIB_FLAGS := -DSHARED > > > > ifeq ($(VERBOSE),1) > > Q = > > -- > > 2.33.0 > >