.o
файлы являются объектами. Это выходные данные компилятора и входные данные для компоновщика / библиотекаря.
.a
файлы являются архивами. Они представляют собой группы объектов или статические библиотеки и также вводятся в компоновщик.
Дополнительный контент
Я не заметил "примеры" в вашем вопросе. Обычно вы будете использовать make-файл для генерации статических библиотек.
AR = ar
CC = gcc
objects := hello.o world.o
libby.a: $(objects)
$(AR) rcu $@ $(objects)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
Это скомпилирует hello.c
и world.c
в объекты, а затем заархивирует их в библиотеку. В зависимости от платформы вам также может потребоваться запустить утилиту под названием ranlib
для создания оглавления в архиве.
Интересное примечание: .a
файлы технически архивные файлы , а не библиотеки. Они аналогичны zip-файлам без сжатия, хотя используют гораздо более старый формат файла. Оглавление, сгенерированное такими утилитами, как ranlib
, делает архив библиотекой . Архивные файлы Java (.jar
) похожи в том, что они представляют собой zip-файлы, которые имеют некоторые специальные структуры каталогов, созданные архиватором Java.