В чем разница между этими двумя типами файлов. Я вижу, что мое приложение С++ связывается с обоими типами во время создания исполняемого файла.
Как создать файлы .a? ссылки, ссылки и особенно примеры, высоко оценены.
В чем разница между этими двумя типами файлов. Я вижу, что мое приложение С++ связывается с обоими типами во время создания исполняемого файла.
Как создать файлы .a? ссылки, ссылки и особенно примеры, высоко оценены.
.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.
Файл .o является результатом компиляции одного блока компиляции (в основном файла исходного кода с соответствующими файлами заголовков), в то время как файл .a является одним или несколькими файлами .o, упакованными как библиотека.
D Хороший ответ Shawley, я просто хотел добавить пару баллов, потому что другие ответы отражают неполное понимание того, что происходит.
Имейте в виду, что архивные файлы (.a) не ограничены содержащими объектные файлы (.o). Они могут содержать произвольные файлы. Не часто полезно, но смотрите динамическую компоновку зависимой информации, встроенную в архив, для глупого трюка-линкера.
Также обратите внимание, что объектные файлы (.o) не обязательно являются результатом одного блока компиляции. Можно частично связать несколько более мелких объектных файлов в один больший файл.
http://www.mihaiu.name/2002/library_development_linux/ - поиск на этой странице для "частичного"
Вы можете использовать ar
для создания файла .a
(статическая библиотека) из .o
файлов (объектных файлов)
Подробнее см. man ar
.
Я считаю, что файл .a - это архив, который может содержать несколько объектных файлов.