Подтвердить что ты не робот

.o файлы против файлов .a

В чем разница между этими двумя типами файлов. Я вижу, что мое приложение С++ связывается с обоими типами во время создания исполняемого файла.

Как создать файлы .a? ссылки, ссылки и особенно примеры, высоко оценены.

4b9b3361

Ответ 1

.o файлы - это объекты. Это результат компилятора и вход для компоновщика/библиотекаря.

.a файлы являются архивами. Они представляют собой группы объектов или статические библиотеки, а также вводятся в компоновщик.

Дополнительный контент

Я не заметил часть "примеров" вашего вопроса. Как правило, вы будете использовать make файл для создания статических библиотек.

AR = ar 
CC = gcc

objects := hello.o world.o

libby.a: $(objects)
    $(AR) rcu [email protected] $(objects)

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o [email protected]

Это будет компилировать hello.c и world.c в объекты, а затем архивировать их в библиотеку. В зависимости от платформы вам также может понадобиться запустить утилиту под названием ranlib для создания оглавления в архиве.

Интересное примечание: .a файлы - это файлы с техническими архивами, а не библиотеки. Они аналогичны zip файлам без сжатия, хотя они используют гораздо более старый формат файла. Оглавление, созданное такими утилитами, как ranlib, - это то, что делает архив библиотекой. Файлы архива Java (.jar) аналогичны тем, что они представляют собой zip файлы, которые имеют некоторые специальные структуры каталогов, созданные архиватором Java.

Ответ 2

Файл .o является результатом компиляции одного блока компиляции (в основном файла исходного кода с соответствующими файлами заголовков), в то время как файл .a является одним или несколькими файлами .o, упакованными как библиотека.

Ответ 3

D Хороший ответ Shawley, я просто хотел добавить пару баллов, потому что другие ответы отражают неполное понимание того, что происходит.

Имейте в виду, что архивные файлы (.a) не ограничены содержащими объектные файлы (.o). Они могут содержать произвольные файлы. Не часто полезно, но смотрите динамическую компоновку зависимой информации, встроенную в архив, для глупого трюка-линкера.

Также обратите внимание, что объектные файлы (.o) не обязательно являются результатом одного блока компиляции. Можно частично связать несколько более мелких объектных файлов в один больший файл.

http://www.mihaiu.name/2002/library_development_linux/ - поиск на этой странице для "частичного"

Ответ 4

Вы можете использовать ar для создания файла .a (статическая библиотека) из .o файлов (объектных файлов)

Подробнее см. man ar.

Ответ 5

Я считаю, что файл .a - это архив, который может содержать несколько объектных файлов.