В чем разница между этими двумя типами файлов. Я вижу, что мое приложение С++ связывается с обоими типами во время создания исполняемого файла.
Как создать файлы .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 - это архив, который может содержать несколько объектных файлов.