J'essaie de configurer un projet automake qui utilise un mélange de bibliothèques libtool et d'exectuables, et j'ai du mal à fouiller la documentation automake, en particulier. en ce qui concerne le fait de dire au compilateur de se lier.
Quelqu'un peut-il donc expliquer les différences entre LDADD
et LIBADD
?
Des choses comme:
-lname_of_library
valeurs de style par rapport aux noms de fichiers directs, etc.Chaque fois que j'essaie de lire la documentation pertinente, il semble que cela suppose que je sais des choses que je ne connais pas.
Utilisez le LIBADD
primaire pour les bibliothèques et LDADD
pour les exécutables. Si vous construisiez une bibliothèque libtool libfoo.la
, Qui dépendait d'une autre bibliothèque libbar.la
, Vous utiliseriez:
libfoo_la_LIBADD = libbar.la
Si vous aviez d'autres bibliothèques non libtool, vous les ajouteriez également avec les options -L
Et -l
:
libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng
En règle générale, vous utiliseriez le script de configuration pour trouver ces bibliothèques supplémentaires et utiliser AC_SUBST
Pour les transmettre avec:
libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS)
Pour un programme, utilisez simplement LDADD
:
myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog.
Parfois, les limites sont un peu vagues. $(EXTRA_FOO_LIBS)
aurait pu être ajoutée à myprog_LDADD
. Ajouter des dépendances à une bibliothèque libtool (.la
) Et utiliser libtool
pour faire toute la magie de l'éditeur de liens spécifique à la plate-forme, est généralement la meilleure approche. Il conserve toutes les métadonnées de l'éditeur de liens au même endroit.
Comme mentionné dans l'un des livres, LDADD
est des éléments ADDitional linker (LD) - c'est-à-dire des éléments qui sont ajoutés lors de la liaison. Ce serait, par exemple, lors de la production de programmes. LDADD
peut spécifier:
lib/libfudge.la
-lm
, Ou/lib/libmagicalwonderland.a
-L/opt/lib -lmagical
Ils sont par ordre de préférence - Utiliser les deux derniers est juste demander pour des problèmes car ils pointent vers des choses qui peuvent ou non être présentes.
LIBADD
consiste à spécifier les LIBraries supplémentaires à utiliser. Ceci est utilisé lors de la construction d'une bibliothèque pour spécifier que des bibliothèques supplémentaires sont nécessaires pour construire ou utiliser la bibliothèque. Vous le verrez spécifié comme quelque chose comme libfred_la_LIBADD =
. Il peut être utilisé pour spécifier les bibliothèques libtool ou les bibliothèques système et placera ces bibliothèques dans le libtool .la
Résultant pour la bibliothèque, donc quand il s'agit de se lier à la bibliothèque, vous obtenez toutes les bibliothèques appropriées.
Vous ne devez spécifier que les bibliothèques à lier, donc, par exemple, ma bibliothèque libfred.la
Dépend de certaines routines mathématiques, c'est-à-dire qu'elle dépend de libm
. Lorsque je spécifie bibliothèques supplémentaires pour la bibliothèque, je déclare:
libfred_la_LIBADD = -lm
Cette dépendance est codée lorsque je crée la bibliothèque et est également transmise aux consommateurs de la bibliothèque.
La règle d'or est la suivante: