Используя опцию gcc -c
, вы указываете ему создавать только объект из foo.c
, поэтому единственный продукт, который вы получаете с помощью этой команды gcc, - это объектный файл .Тот факт, что его суффикс .so
, объясняется только тем, что вы принудительно использовали опцию -o
.Если вы запустите эту команду без -o
, вы увидите, что на выходе будет просто foo.o
- объектный файл.
Если вы опустите -c
в команде gcc, вы получите общий объектВы хотели.
Запуск file
в выходном файле показывает разницу (обратите внимание, что я не устанавливаю имя вывода с помощью -o
и разрешаю gcc использовать его имена по умолчанию):
С -c
:
> gcc -c foo.c -shared
> file foo.o
foo.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
Без -c
:
> gcc foo.c -shared
> file a.out
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=a63581bfc45f845c501ffb6635, not stripped
^^^
|||