Build with static libzstd (was: Re: GDB: How does configure with with config.cache??)

Paul Smith via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Organization GNU's Not UNIX!
Message-ID <[email protected]>
On Wed, 2024-09-11 at 18:10 -0400, Paul Smith via Gdb wrote:
> Can someone explain to me how the GDB top-level configure script
> works?  It's driving me bananas.

OK, as might be expected most of this was my fault and my
misunderstanding: my build tool accidentally was not deleting a
previous build directory.  After I got some sleep last night the
gremlins I was fighting all left town.

The thing that is wrong now is that I build libzstd as a static library
with multithreaded support, and I want to link it statically but this
doesn't work well.

I am configuring GDB with --enable-static --disable-shared (but this is
probably related to GDB itself not its prerequisites).

The problem is that when the GDB configure uses pkg-config to get
details about the libzstd package, it doesn't pass the --static option
and so the resulting link options don't contain -pthread:

  $ pkg-config --libs libzstd
  -L/data/src/zstd/Linux-Release-make/dist/lib -lzstd

  $ pkg-config --libs --static libzstd
  -L/data/src/zstd/Linux-Release-make/dist/lib -lzstd -pthread

Because -pthread is missing in the first case, the configure test
programs that try to link code fail; for example:

  configure:27555: checking for ELF support in BFD
  configure:27575: ./libtool --quiet --mode=link x86_64-rl84-linux-gnu-gcc -o conftest -I/data/src/gdb/gdb-15.1/gdb/../include -I../bfd -I/data/src/gdb/gdb-15.1/gdb/../bfd -O2 -fPIC -static-libgcc     -I/data/src/xxhash/Linux-Release-make/dist/include -L../bfd -L../libiberty   conftest.c -lbfd -liberty  -lncurses -lm -ldl  >&5
  /data/src/zstd/Linux-Release-make/dist/lib/libzstd.a(pool.c.o):pool.c:function POOL_free:(.text+0x15f): error: undefined reference to 'pthread_join'
  /data/src/zstd/Linux-Release-make/dist/lib/libzstd.a(pool.c.o):pool.c:function POOL_create_advanced:(.text+0x3a9): error: undefined reference to 'pthread_create'
  /data/src/zstd/Linux-Release-make/dist/lib/libzstd.a(pool.c.o):pool.c:function POOL_resize:(.text+0x689): error: undefined reference to 'pthread_create'
  collect2: error: ld returned 1 exit status
  configure:27585: result: no

This is obviously problematic since gcore-elf.c is not included in GDB
and the build fails.


I'm not really sure what the right answer is here.  I could of course
force -pthread always by adding LIBS=-pthread to the configure command.

Or maybe the problem is that the libzstd.pc file is wrong: since I
don't have a libzstd.so but only libzstd.a maybe the pc file should
include -pthread in the Libs variable and not just in the Libs.private
variable?

I'll move forward with some kind of workaround, locally.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.