Il y a au moins trois façons de procéder nativement . Le premier moyen et le plus portable est d'utiliser libtool. Après avoir construit les autres bibliothèques également avec libtool, vous pouvez les combiner simplement en ajoutant les librairies .la à une variable automake libaz_la_LIBADD, ou directement à partir d'un Makefile avec quelque chose comme :
libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la
Les deux autres sont au moins disponibles lorsque vous utilisez GNU ar. Vous pouvez utiliser un MRI script (nommé par exemple libaz.mri), tel que :
create libaz.a
addlib libabc.a
addlib libxyz.a
save
end
et ensuite exécuter ar comme :
ar -M <libaz.mri
Ou vous pouvez utiliser un mince archive (option -T
), ce qui permettra d'ajouter d'autres archives sans qu'elles soient imbriquées à l'intérieur, bien que l'inconvénient soit que si vous voulez distribuer la bibliothèque statique, l'objet détaché sera absent :
ar -rcT libaz.a libabc.a libxyz.a
Toutes les méthodes ci-dessus gèrent gracieusement les noms de membres qui se chevauchent dans les archives originales.
Sinon, il faudrait déballer dans différents répertoires et remballer à nouveau, pour éviter de remplacer des noms de membres qui se chevauchent :
mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz
9 votes
Voir aussi :
libtool
-solution basée sur la technologie :libtool -static -o new.a old1.a old2.a
2 votes
Cela fonctionne parfaitement, juste un petit doute si ces bibliothèques ont un fichier .o commun (mais que les fonctionnalités sont différentes) cela fonctionnera-t-il toujours ?
0 votes
Libtool -static -o new.a old1.a old2.a ne fonctionne pas sous linux(centos 7)