Файлы.o по сравнению с.a файлами

Это невозможно, так как все классы в пакете могут не загружаться, тогда как вы всегда знаете пакет класса.

54
задан 17 March 2009 в 15:25
поделиться

5 ответов

.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 archiver.

58
ответ дан D.Shawley 7 November 2019 в 08:01
поделиться

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

14
ответ дан Vatine 7 November 2019 в 18:01
поделиться

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

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

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

http://www.mihaiu.name/2002/library_development_linux/ - ищет на этой странице "частичный"

11
ответ дан Community 7 November 2019 в 18:01
поделиться

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

Видят man ar для деталей.

5
ответ дан qrdl 7 November 2019 в 18:01
поделиться

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

2
ответ дан Dana Holt 7 November 2019 в 18:01
поделиться