Outils pour utilisateurs

Outils du site


probleme:liaison

Messages d'erreur

error: undefined symbol

  • Est-ce que le symbole existe ?

Le premier point est de vérifier existe dans l'une des librairies ou fichiers objets que l'on souhaiter regrouper. Voir nm.

  • Est-ce que l'ordre de liaison est le bon ?

Si les symboles sont bien existants, il faut vérifier que l'ordre de liaison est le bon. Par exemple, avec le message d'erreur :

ld.lld: error: undefined symbol: Magnum::GL::Context::tryCreate()
>>> referenced by GLContext.h:151 (...\Magnum/Platform\GLContext.h:151)
>>>               .../file.cpp.o:(Magnum::Platform::GLContext::tryCreate())

Il faut essayer d'inverser l'ordre du fichier file.cpp.o et libMagnumGL.a (qui contient le symbole Magnum::GL::Context::tryCreate()).

  • Mélange de librairies dynamiques et statiques ?

En 64 bit, pour fusionner les librairies statiques vers des librairies dynamiques, il est nécessaire d'activer la fonctionnalité -fPIC.

ld: error: ….a(…): requires dynamic R_X86_64_PC32 reloc against '…' which may overflow at runtime; recompile with -fPIC

C'est dû à un problème dans l'ordre des fichiers objets et des librairies statique.

Problème :

/usr/bin/c++ -fPIC   -shared -Wl,-soname,lib2lgc.so -o lib2lgc.so CMakeFiles/2lgc.dir/2lgc/math/compare_decimal.cc.o CMakeFiles/2lgc.dir/2lgc/poco/number.cc.o CMakeFiles/2lgc.dir/2lgc/poco/number_visitor_unit.cc.o CMakeFiles/2lgc.dir/2lgc/poco/number_visitor_value.cc.o 2lgc/poco/lib2lgcpoco.a

Solution :

/usr/bin/c++ -fPIC   -shared -Wl,-soname,lib2lgc.so -o lib2lgc.so 2lgc/poco/lib2lgcpoco.a CMakeFiles/2lgc.dir/2lgc/math/compare_decimal.cc.o CMakeFiles/2lgc.dir/2lgc/poco/number.cc.o CMakeFiles/2lgc.dir/2lgc/poco/number_visitor_unit.cc.o CMakeFiles/2lgc.dir/2lgc/poco/number_visitor_value.cc.o

/usr/bin/ld: relocation R_X86_64_32 against '…' can not be used when making a shared object; recompile with -fPIC

Dans un environnement 64 bits, il n'est pas possible d'utiliser des librairies statiques pour générer une librairie dynamique si les librairies statiques n'ont pas été compilées avec -fPIC.

Position Independent Code and x86-64 libraries Archive du 05/01/2013 le 24/01/2023

probleme/liaison.txt · Dernière modification : 2023/04/03 11:58 de root