Comment combiner deux fichiers objets .o compilés par GCC en un troisième fichier .o ?
$ gcc -c a.c -o a.o
$ gcc -c b.c -o b.o
$ ??? a.o b.o -o c.o
$ gcc c.o other.o -o executable
Si vous avez accès aux fichiers sources, l -combine
Le drapeau GCC fusionnera les fichiers sources avant la compilation :
$ gcc -c -combine a.c b.c -o c.o
Cependant, cela ne fonctionne que pour les fichiers source, et GCC n'accepte pas .o
comme entrée pour cette commande.
Normalement, la liaison .o
ne fonctionne pas correctement, car vous ne pouvez pas utiliser la sortie de l'éditeur de liens comme entrée pour celui-ci. Le résultat est une bibliothèque partagée et n'est pas lié statiquement dans l'exécutable résultant.
$ gcc -shared a.o b.o -o c.o
$ gcc c.o other.o -o executable
$ ./executable
./executable: error while loading shared libraries: c.o: cannot open shared object file: No such file or directory
$ file c.o
c.o: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
$ file a.o
a.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
2 votes
Gcc ne dispose pas actuellement d'un
-combine
option. Elle existe dans gcc 4.1.2 et n'existe pas dans gcc 6.3.0 (quelqu'un d'autre peut trouver quand elle a été supprimée).