Jak połączyć dwa skompilowane przez GCC pliki obiektowe .o w trzeci plik .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
Jeśli masz dostęp do plików źródłowych, -combineflaga GCC połączy pliki źródłowe przed kompilacją:
$ gcc -c -combine a.c b.c -o c.o
Jednak działa to tylko dla plików źródłowych, a GCC nie akceptuje .oplików jako danych wejściowych dla tego polecenia.
Zwykle łączenie .oplików nie działa poprawnie, ponieważ nie można użyć danych wyjściowych konsolidatora jako danych wejściowych. Rezultatem jest biblioteka współdzielona, która nie jest statycznie połączona z wynikowym plikiem wykonywalnym.
$ 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
-combineopcji. Istnieje w gcc 4.1.2 i nie istnieje w gcc 6.3.0 (ktoś inny może dowiedzieć się, kiedy zostało usunięte).