Wie kombiniert man zwei GCC-kompilierte .o-Objektdateien zu einer dritten .o-Datei?
$ 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
Wenn Sie Zugriff auf die Quelldateien haben, -combine
werden die Quelldateien vor dem Kompilieren mit dem GCC-Flag zusammengeführt:
$ gcc -c -combine a.c b.c -o c.o
Dies funktioniert jedoch nur für Quelldateien und GCC akzeptiert dies nicht .o
Dateien als Eingabe für diesen Befehl.
Normalerweise .o
funktioniert das Verknüpfen von Dateien nicht ordnungsgemäß, da Sie die Ausgabe des Linkers nicht als Eingabe dafür verwenden können. Das Ergebnis ist eine gemeinsam genutzte Bibliothek und nicht statisch mit der resultierenden ausführbaren Datei verknüpft.
$ 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
-combine
Option. Es existiert in gcc 4.1.2 und existiert nicht in gcc 6.3.0 (jemand anderes kann herausfinden, wann es entfernt wurde).