Все ли функции из статической библиотеки связаны с конечным исполняемым файлом?

Я новичок в статических библиотеках и просто хочу быть на 100% уверен, что то, что я делаю, правильно. Если коротко, я попытаюсь объяснить мой вопрос на этом простом примере:

Если в mylib.a я определил следующие функции:

int f1 (int a, int b) {/*some code here...*/}
int f2 (int a, int b) {/*some code here...*/}
int f3 (int a, int b) {/*some code here...*/}
// we also suppose that f1 does not call f2 or f3.

В моем проекте я связал mylib.a но использовал только f1 . f2 ли f2 и f3 попадать в финальный исполняемый файл?

У меня есть ощущение, что это также зависит от компилятора, но давайте рассмотрим, что мы говорим только о GCC здесь. Я найду любую конкретную информацию о других компиляторах, таких как компилятор MSVC compiler и о том, как они относятся к этой проблеме, так как я хочу сделать свои библиотеки максимально совместимыми.


Я также нахожу объяснение, данное в Википедии расплывчатым, так как не нахожу, что ВОЗ включает those parts of the library... Кроме того, выражение, it is enough to include не дает мне уверенности, что включен только и только необходимый код.

При статическом связывании достаточно включить те части библиотеки, на которые прямо или косвенно ссылается целевой исполняемый файл (или целевая библиотека). С динамическими библиотеками загружается вся библиотека, так как заранее неизвестно, какие функции будут вызываться приложениями.

Всего 1 ответ


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

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


Есть идеи?

10000