J'essaie de construire un projet qui dépend de bibliothèques statiques distribuées binaires.
L'éditeur de liens se plaint de ne pas trouver les fonctions ini_config
, entre autres:
config_params.c:(.text+0x16f): undefined reference to `ini_get_config_valueobj'
Il trouve les bibliothèques dynamiques, mais pas la version statique:
attempt to open /usr/lib/gcc/x86_64-linux-gnu/7/libini_config.a failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libini_config.so succeeded
Ces fichiers sont présents sur l’extension Debian. Existe-t-il un moyen de les envoyer également sur Ubuntu?
Tous les paquets semblent installer leurs bibliothèques statiques. Ils peuvent être trouvés dans /usr/lib/x86_64-linux-gnu/
.
Apparemment, l'éditeur de liens choisit d'abord les bibliothèques dynamiques lorsqu'il utilise -lsomelib
. Pour remplacer cela, vous pouvez utiliser le -l:libsomelib.a
, il ne fera alors que correspondre au nom de fichier exact somelib.a
. Utilisez -L/usr/lib/x86_64-linux-gnu
de la même manière que pour "relier" des bibliothèques dynamiques.
Pour déboguer la phase de recherche de la bibliothèque, vous pouvez ajouter -Wl,--versbose
à vos LDFLAGS. Gcc affichera ensuite tous les chemins essayés pour vos options -lXXX
.
N'oubliez pas que les archives ne sont vérifiées qu'une fois, comme indiqué dans cette réponse , si certains symboles ne sont toujours pas trouvés, vous devrez peut-être réorganiser les paramètres.