[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
0001-build-Fix-link-error-on-bi-arch-systems-when-libnbd-.patch
Description: Text Data
- Re: GNU poke 3.90.2 link error due to libbnd,
Bruno Haible <=