gratifiant > linux.debian.user.french

BERTRAND Joël (27/10/2019, 13h30)
Bonjour à tous,

Depuis la mise à jour de mon poste de travail (debian/testing), j'ai un
problème de compilation assez surprenant que je n'arrive à résoudre.

Sources :


Procédure de compilation :
./autogen.sh
cd ..
mkdir build
cd build
../rpl/configure --enable-native --enable-rplcas

Et attendre l'erreur :
g++ -g -O2 -mtune=native -march=native -O2 -malign-double -Wall
-funsigned-char -fpermissive -fno-strict-aliasing
-DGIAC_GENERIC_CONSTANTS -pthread -o icas icas.o
/export/home/bertrand/gopher/rpl2/build-amd64/rplcas/giac-1.5.0/src/.libs/libgiac.a
/import/home/bertrand/gopher/rpl2/build-amd64/rplcas/lib/libpari.a
/import/home/bertrand/gopher/rpl2/build-amd64/rplcas/lib/ntl.a
/import/home/bertrand/gopher/rpl2/build-amd64/rplcas/lib/libcocoa.a
/import/home/bertrand/gopher/rpl2/build-amd64/tools/gsl-2.6/.libs/libgsl.a
/import/home/bertrand/gopher/rpl2/build-amd64/rplcas/lib/libgmp.a
/import/home/bertrand/gopher/rpl2/build-amd64/rplcas/lib/libmpfr.a
/import/home/bertrand/gopher/rpl2/build-amd64/rplcas/lib/libmpfi.a
../.libs/libxcas.a
/export/home/bertrand/gopher/rpl2/build-amd64/rplcas/giac-1.5.0/src/.libs/libgiac.a
-lrt -lpthread /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so -lsamplerate
-llapack -lblas -lgfortran -ldl -lpng16 -lm -pthread
/usr/bin/ld:
/import/home/bertrand/gopher/rpl2/build-amd64/rplcas/lib/libmpfr.a(get_z_exp.o):
référence au symbole non défini « __gmpz_realloc2 »
/usr/bin/ld : /usr/lib/x86_64-linux-gnu/libgmp.so.10 : erreur lors de
l'ajout de symboles : DSO manquant dans la ligne de commande
collect2: error: ld returned 1 exit status

Pour un certain nombre de raisons, les bibliothèques sont compilées
statiquement (ça permet de ne pas segfaulter lorsque l'on charge des
modules externes).

L'erreur varie en fonction de l'ordre des bibliothèques. Avec gcc 8, ça
compile sans problème.

mpfr est configuré comme suit :
.../../../rpl/rplcas/mpfr-4.0.2/configure
--with-gmp=/import/home/bertrand/gopher/rpl2/build-amd64/rplcas
--disable-shared --enable-static
--prefix=/import/home/bertrand/gopher/rpl2/build-amd64/rplcas
et le script configure trouve bien les en-têtes et la version statique
de libgmp.

Naturellement, le symbole non trouvé est bien présent dans la
bibliothèque libgmp.a :
rayleigh:[~/gopher/rpl2/build-amd64/rplcas/lib] > nm -a libgmp.a | grep
__gmpz_realloc2
0000000000000000 T __gmpz_realloc2

J'avoue que je ne sais plus où chercher. Toute idée est la bienvenue.

Bien cordialement,

JKB
BERTRAND Joël (31/10/2019, 12h40)
Je me réponds à moi-même. Le problème provient à la fois de binutils et
d'automake.

Binutils parce que le linker est beaucoup plus tatillons sur l'ordre
des bibliothèques quand elles sont réentrantes. Et automake, parce que
celui-ci gère l'ordre des bibliothèques un peu comme il le décide
(l'ordre des bibliothèques sur la ligne de commande change entre
debian/stable et debian/testing, je n'ai pas encore compris pourquoi).

JKB
Discussions similaires