Как работают статические библиотеки? (C / C ++) - PullRequest
7 голосов
/ 06 октября 2011

Я знаю, как их использовать и создавать, но я не могу найти текст о том, как это реализовано, как происходит вызов функции и так далее. Может ли кто-нибудь помочь мне с этой информацией? Потому что я хочу понять их, а не просто знать, что это такое и как это работает

Ответы [ 3 ]

11 голосов
/ 06 октября 2011

Как вы, возможно, знаете, при компиляции исходного файла вы получаете объектный файл .В зависимости от вашей платформы его расширение может быть .o или .obj или что-то еще.Статическая библиотека в основном представляет собой набор объектных файлов, вроде файла .zip, но, вероятно, не сжатый.Линкер , при попытке сгенерировать исполняемый файл пытается разрешить ссылочные символы, то есть определить, в каком объектном файле (будь то в библиотеке или иным образом) они определены, и связать их вместе,Таким образом, статическая библиотека может также содержать индекс определенных символов, чтобы облегчить это.Точная реализация зависит от конкретного компоновщика и формата файла библиотеки, но базовая архитектура такая же, как упоминалось.

Возможно, вы захотите проверить выделенные курсивом ключевые слова в Википедии или что-то еще для получения дополнительной информации о них.

4 голосов
/ 06 октября 2011

Я думаю Википедия объясняет это хорошо:

В информатике статическая или статически связанная библиотека набор процедур, внешних функций и переменных, которые разрешаются в вызывающей программе во время компиляции и скопированы в целевое приложение компилятор, компоновщик или компоновщик, создающий объектный файл и автономный исполняемый файл. Этот исполняемый файл и процесс компиляции оба они известны как статическая сборка программы. Исторически, библиотеки могут быть только статичными. Статические библиотеки либо объединены с другими статическими библиотеками и объектными файлами во время сборки / компоновки для формирования одного исполняемого файла, или они могут быть загружены во время выполнения в адресное пространство загруженного исполняемого файла со статическим смещением памяти определяется во время компиляции / соединения.

3 голосов
/ 06 октября 2011

Статическая библиотека - это просто коллекция .o файлов, собранных в архив, похожий на zip-файл (без сжатия). Когда вы используете его для компоновки, компоновщик будет искать в библиотеке файлы .o, которые содержат любые отсутствующие символы в основной программе, и извлекает эти .o файлы для компоновки, как если бы они были включены в команду. строка как .o файлы в вашей основной программе. Этот процесс применяется рекурсивно, поэтому, если какой-либо из файлов .o, извлеченных из библиотеки, имеет неразрешенные символы, в библиотеке снова выполняется поиск других файлов .o, которые предоставляют определения.

...