poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GNU poke 3.90.2 link error due to libbnd


From: Bruno Haible
Subject: Re: GNU poke 3.90.2 link error due to libbnd
Date: Sat, 10 Feb 2024 01:09:36 +0100

Ubuntu 22.04/x86_64 is a bi-arch system. Actually even a tri-arch
system: One can install binaries in each of the following ABIs:
  64
  32
  x32

I have installed libbnd (as an Ubuntu package) in 64-bit mode only:
  /usr/include/libnbd.h
  /usr/lib/x86_64-linux-gnu/libnbd.a
  /usr/lib/x86_64-linux-gnu/libnbd.so
  /usr/lib/x86_64-linux-gnu/libnbd.so.0
  /usr/lib/x86_64-linux-gnu/libnbd.so.0.0.0
exist, but
  /usr/i686-linux-gnu/lib/libnbd.*
and
  /usr/x86_64-linux-gnux32/lib/libnbd.*
do not exist.

During the configure step, for each of the three ABIs, configure
detects

  checking for libnbd... yes

In the 32-bit and x32 ABIs, there is then an error while linking libpoke:

/bin/bash ../libtool  --tag=CC   --mode=link i686-linux-gnu-gcc-11 -Wall   -g 
-O2 -version-info 1:0:0 -lc -no-undefined -L/inst-x86_64-32/lib -o libpoke.la 
-rpath /inst-x86_64-32/lib libpoke_la-libpoke.lo libpoke_la-pk-val.lo 
libpoke_la-pkl.lo libpoke_la-pkl-ast.lo libpoke_la-pkl-env.lo 
libpoke_la-pkl-pass.lo libpoke_la-pkl-promo.lo libpoke_la-pkl-fold.lo 
libpoke_la-pkl-typify.lo libpoke_la-pkl-anal.lo libpoke_la-pkl-trans.lo 
libpoke_la-pkl-tab.lo libpoke_la-pkl-lex.lo libpoke_la-pkl-gen.lo 
libpoke_la-pkl-asm.lo libpoke_la-pkl-diag.lo libpoke_la-pkl-parser.lo 
libpoke_la-pvm.lo libpoke_la-pvm-val.lo libpoke_la-pvm-env.lo 
libpoke_la-pvm-alloc.lo libpoke_la-pvm-program.lo libpoke_la-pvm-wrappers.lo 
libpoke_la-ios.lo libpoke_la-ios-dev-file.lo libpoke_la-ios-dev-mem.lo 
libpoke_la-ios-dev-zero.lo libpoke_la-ios-dev-sub.lo libpoke_la-ios-buffer.lo 
libpoke_la-ios-dev-stream.lo ../common/libpoke_la-pk-utils.lo 
libpoke_la-ios-dev-mmap.lo libpoke_la-ios-dev-nbd.lo libpoke_la-ios-dev-proc.lo 
../gl-libpoke/libgnu.la libpvmjitter.la -lgc -lnbd 
libtool: link: i686-linux-gnu-gcc-11 -shared  -fPIC -DPIC  
.libs/libpoke_la-libpoke.o .libs/libpoke_la-pk-val.o .libs/libpoke_la-pkl.o 
.libs/libpoke_la-pkl-ast.o .libs/libpoke_la-pkl-env.o 
.libs/libpoke_la-pkl-pass.o .libs/libpoke_la-pkl-promo.o 
.libs/libpoke_la-pkl-fold.o .libs/libpoke_la-pkl-typify.o 
.libs/libpoke_la-pkl-anal.o .libs/libpoke_la-pkl-trans.o 
.libs/libpoke_la-pkl-tab.o .libs/libpoke_la-pkl-lex.o 
.libs/libpoke_la-pkl-gen.o .libs/libpoke_la-pkl-asm.o 
.libs/libpoke_la-pkl-diag.o .libs/libpoke_la-pkl-parser.o 
.libs/libpoke_la-pvm.o .libs/libpoke_la-pvm-val.o .libs/libpoke_la-pvm-env.o 
.libs/libpoke_la-pvm-alloc.o .libs/libpoke_la-pvm-program.o 
.libs/libpoke_la-pvm-wrappers.o .libs/libpoke_la-ios.o 
.libs/libpoke_la-ios-dev-file.o .libs/libpoke_la-ios-dev-mem.o 
.libs/libpoke_la-ios-dev-zero.o .libs/libpoke_la-ios-dev-sub.o 
.libs/libpoke_la-ios-buffer.o .libs/libpoke_la-ios-dev-stream.o 
../common/.libs/libpoke_la-pk-utils.o .libs/libpoke_la-ios-dev-mmap.o 
.libs/libpoke_la-ios-dev-nbd.o .libs/libpoke_la-ios-dev-proc.o  
-Wl,--whole-archive ../gl-libpoke/.libs/libgnu.a ./.libs/libpvmjitter.a 
-Wl,--no-whole-archive  -Wl,-rpath -Wl,/inst-x86_64-32/lib -Wl,-rpath 
-Wl,/inst-x86_64-32/lib -lc -L/inst-x86_64-32/lib 
-L/build/poke-3.90.2/build-32/jitter/lib -lncurses -lm 
/inst-x86_64-32/lib/libgc.so -lnbd  -g -O2   -Wl,-soname -Wl,libpoke.so.1 -o 
.libs/libpoke.so.1.0.0
/usr/lib/gcc-cross/i686-linux-gnu/11/../../../../i686-linux-gnu/bin/ld: cannot 
find -lnbd: No such file or directory
collect2: error: ld returned 1 exit status
make[3]: *** [Makefile:3042: libpoke.la] Error 1

/bin/bash ../libtool  --tag=CC   --mode=link 
/usr/bin/x86_64-linux-gnux32-gcc-11 -Wall   -g -O2 -version-info 1:0:0 -lc 
-no-undefined -L/inst-x86_64-x32/lib -o libpoke.la -rpath /inst-x86_64-x32/lib 
libpoke_la-libpoke.lo libpoke_la-pk-val.lo libpoke_la-pkl.lo 
libpoke_la-pkl-ast.lo libpoke_la-pkl-env.lo libpoke_la-pkl-pass.lo 
libpoke_la-pkl-promo.lo libpoke_la-pkl-fold.lo libpoke_la-pkl-typify.lo 
libpoke_la-pkl-anal.lo libpoke_la-pkl-trans.lo libpoke_la-pkl-tab.lo 
libpoke_la-pkl-lex.lo libpoke_la-pkl-gen.lo libpoke_la-pkl-asm.lo 
libpoke_la-pkl-diag.lo libpoke_la-pkl-parser.lo libpoke_la-pvm.lo 
libpoke_la-pvm-val.lo libpoke_la-pvm-env.lo libpoke_la-pvm-alloc.lo 
libpoke_la-pvm-program.lo libpoke_la-pvm-wrappers.lo libpoke_la-ios.lo 
libpoke_la-ios-dev-file.lo libpoke_la-ios-dev-mem.lo libpoke_la-ios-dev-zero.lo 
libpoke_la-ios-dev-sub.lo libpoke_la-ios-buffer.lo libpoke_la-ios-dev-stream.lo 
../common/libpoke_la-pk-utils.lo libpoke_la-ios-dev-mmap.lo 
libpoke_la-ios-dev-nbd.lo libpoke_la-ios-dev-proc.lo ../gl-libpoke/libgnu.la 
libpvmjitter.la -lgc -lnbd 
libtool: link: /usr/bin/x86_64-linux-gnux32-gcc-11 -shared  -fPIC -DPIC  
.libs/libpoke_la-libpoke.o .libs/libpoke_la-pk-val.o .libs/libpoke_la-pkl.o 
.libs/libpoke_la-pkl-ast.o .libs/libpoke_la-pkl-env.o 
.libs/libpoke_la-pkl-pass.o .libs/libpoke_la-pkl-promo.o 
.libs/libpoke_la-pkl-fold.o .libs/libpoke_la-pkl-typify.o 
.libs/libpoke_la-pkl-anal.o .libs/libpoke_la-pkl-trans.o 
.libs/libpoke_la-pkl-tab.o .libs/libpoke_la-pkl-lex.o 
.libs/libpoke_la-pkl-gen.o .libs/libpoke_la-pkl-asm.o 
.libs/libpoke_la-pkl-diag.o .libs/libpoke_la-pkl-parser.o 
.libs/libpoke_la-pvm.o .libs/libpoke_la-pvm-val.o .libs/libpoke_la-pvm-env.o 
.libs/libpoke_la-pvm-alloc.o .libs/libpoke_la-pvm-program.o 
.libs/libpoke_la-pvm-wrappers.o .libs/libpoke_la-ios.o 
.libs/libpoke_la-ios-dev-file.o .libs/libpoke_la-ios-dev-mem.o 
.libs/libpoke_la-ios-dev-zero.o .libs/libpoke_la-ios-dev-sub.o 
.libs/libpoke_la-ios-buffer.o .libs/libpoke_la-ios-dev-stream.o 
../common/.libs/libpoke_la-pk-utils.o .libs/libpoke_la-ios-dev-mmap.o 
.libs/libpoke_la-ios-dev-nbd.o .libs/libpoke_la-ios-dev-proc.o  
-Wl,--whole-archive ../gl-libpoke/.libs/libgnu.a ./.libs/libpvmjitter.a 
-Wl,--no-whole-archive  -Wl,-rpath -Wl,/inst-x86_64-x32/lib -Wl,-rpath 
-Wl,/inst-x86_64-x32/lib -lc -L/inst-x86_64-x32/lib 
-L/build/poke-3.90.2/build-x32/jitter/lib /inst-x86_64-x32/lib/libgc.so -lnbd  
-g -O2   -Wl,-soname -Wl,libpoke.so.1 -o .libs/libpoke.so.1.0.0
/usr/lib/gcc-cross/x86_64-linux-gnux32/11/../../../../x86_64-linux-gnux32/bin/ld:
 cannot find -lnbd: No such file or directory
collect2: error: ld returned 1 exit status
make[3]: *** [Makefile:3042: libpoke.la] Error 1

The attached proposed patch fixes the issue. Basically, when pkg-config reports
that a package is present, we have to verify that it is really present.

I have verified it with all 3 ABIs:
  - In the 64-bit ABI, libpoke gets linked to libnbd:

    $ ldd build-64/libpoke/.libs/libpoke.so | grep libnbd
        libnbd.so.0 => /lib/x86_64-linux-gnu/libnbd.so.0 (0x00007f8df66cd000)

  - In the 32-bit and x32 ABIs, libpoke is not linked to libnbd:

    $ ldd build-32/libpoke/.libs/libpoke.so | grep libnbd
    $ ldd build-x32/libpoke/.libs/libpoke.so | grep libnbd

Bruno

Attachment: 0001-build-Fix-link-error-on-bi-arch-systems-when-libnbd-.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]