Linux plusieurs fichiers de bibliothèque statique .a sont fusionnés en un seul fichier de bibliothèque statique .a

Référence : https://www.cnblogs.com/fnlingnzb-learner/p/8127456.html

.a 文件的结构和.tar文件就没有什么区别。 x 命令解出来, a 命令添加, t命令列表
假设A.a, B.a C.a 在/usr/local/lib目录下
mkdir /tmp/libABC
cd /tmp/libABC
ar x /usr/local/lib/A.a
ar x /usr/local/lib/B.a
ar x /usr/local/lib/C.a
ar cru libABC.a *.o
ranlib libABC.a

1. Premiers pas avec gcc

(1) gcc est le compilateur de c/c++ sous linux.

Les options couramment utilisées pour gcc sont -c, -o.

-c signifie uniquement compiler (compiler) le fichier source mais pas lier, il compilera le programme source c de .c ou .cc dans un fichier objet (fichier binaire), généralement un fichier .o.
-o est utilisé pour spécifier le nom du fichier de sortie (out). Si -o n'est pas utilisé, le fichier a.out par défaut est généralement généré dans le dossier courant en tant que programme exécutable.

Nous créons un nouveau dossier de test à n'importe quel endroit, afin de pouvoir écrire des fichiers de test.

Nous créons maintenant un nouveau fichier test.cpp avec le code suivant :

#include "stdio.h"  
int main()  
{
    
      
    printf("test  !!!!!\n");  
    return 0;  
}  

Option -c :

gcc -c test.cpp

Générez un fichier test.o binaire. Le fichier .o est un fichier intermédiaire qui peut être transformé en fichier de bibliothèque ou en fichier exécutable.

option -o :

gcc test.cpp -o test

Ou, utilisez le fichier test.o qui vient d'être généré : gcc test.o -o test

Le fichier exécutable de test peut être généré.

Si la commande est :

gcc test.cpp 或 gcc test.o

Autrement dit, générez le fichier exécutable a.out comme mentionné ci-dessus.

2. Fusionner la bibliothèque statique

Créer une bibliothèque statique

ar rc libtest.a test.o

Parlons maintenant de l'objet de cet article, la fusion des bibliothèques statiques.

Pour créer des commandes de bibliothèque statiques, veuillez vous référer à

Commande ar Linux : https://blog.csdn.net/u013654125/article/details/68064309

Pour l'utilisation de bibliothèques statiques, Baidu.

Notez que l'article lié indique que les modules de la bibliothèque statique sont des fichiers .o.

Avant, j'ai toujours voulu inclure une bibliothèque statique dans une autre bibliothèque statique, telle que : ar rc liball.a libtest1.a libtest2.a

C'est-à-dire inclure libtest1.a et libtest2.a dans liball.a, cette phrase n'est pas un problème !

Mais cette ligne de pensée est fausse! ! ! ! !

Si vous voulez utiliser les fonctions de libtest1.a ou libtest2.a, vous ne les trouverez pas ! ! !

Parce que liball.a contient libtest1.a et libtest2.a, et que gcc trouve le fichier .o, le fichier .o contient la méthode que nous avons écrite

Nous devrions donc écrire comme ceci :

Créez un dossier temporaire, par exemple en créant un nouveau dossier temporaire sous notre dossier de test, placez tous les fichiers .o exportés de chaque bibliothèque .a dans ce dossier, puis saisissez tous les fichiers .o dans les bibliothèques .a.

La commande est la suivante :

cd temp

ar x libtest1.a

ar x libtest2.a

ar rc liball.a *.o

Copiez ensuite liball.a dessus.

おすすめ

転載: blog.csdn.net/u013209189/article/details/129730969