В чем разница между объектным файлом и статической библиотекой (архивным файлом)? - PullRequest
22 голосов
/ 30 мая 2011

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

ar rvs libprofile.a profile.o

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

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

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

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

1 Ответ

14 голосов
/ 30 мая 2011

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

gcc f1.o f2.o -o myexe

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

gcc f1.o libf2.a -o myexe

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

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

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

...