объединитесь два GCC скомпилировали.o объектные файлы в треть.o файл

Как каждый объединяется, два GCC скомпилировали.o объектные файлы в треть.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

Если у Вас есть доступ к исходным файлам -combine Флаг GCC объединит исходные файлы перед компиляцией:

$ gcc -c -combine a.c b.c -o c.o

Однако это только работает на исходные файлы, и GCC не принимает .o файлы, как введено для этой команды.

Обычно, соединение .o файлы не работают правильно, поскольку Вы не можете использовать вывод компоновщика, как введено для него. Результат является общей библиотекой и не связан статически в получающийся исполняемый файл.

$ 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
76
задан Quonux 27 May 2014 в 14:06
поделиться

2 ответа

Передача -relocatable или -r в ld создаст объект, который подходит для входа ld.

$ ld -relocatable a.o b.o -o c.o
$ gcc c.o other.o -o executable
$ ./executable

Созданный файл имеет тот же тип, что и исходные файлы .o.

$ file a.o
a.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
$ file c.o
c.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
90
ответ дан 24 November 2019 в 11:22
поделиться

Если вы хотите создать архив из двух или более файлов .o (т. Е. Статическую библиотеку), используйте команду ar :

ar rvs mylib.a file1.o file2.o
8
ответ дан 24 November 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: