Какая разница между объектным файлом и статической библиотекой (архивным файлом)?

Кажется, файл архива может быть сгенерирован из объектного файла:

ar rvs libprofile.a profile.o

Какая разница между объектным файлом и архивом?

Мне кажется, что оба могут быть использованы непосредственно с gcc, например:

gcc *.c profile.o или gcc *.c libprofile.a

Какая разница?

Ответ 1

Статическая библиотека представляет собой набор из одного или нескольких объектных файлов с индексом для быстрого поиска. Есть некоторые незначительные отличия в том, как компилятор справляется с ними. С объектным файлом вы ссылаетесь следующим образом:

gcc f1.o f2.o -o myexe

с библиотеками вы также можете это сделать:

gcc f1.o libf2.a -o myexe

или вы можете использовать сокращенную версию:

gcc d1.o -lf2 -L. -o myexe

Кроме того, gcc будет ВСЕГДА связывать файлы .o, но он будет искать только библиотеки и ссылаться на них, если есть еще undefined имена.