Я новичок в stati c библиотеках и хочу на 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
и f3
тоже попадут в финальный исполняемый файл?
У меня такое ощущение, что это также спецификация компилятора c, но давайте рассмотрим, что мы говорим только о GCC
здесь. Я найду любую конкретную c информацию о других компиляторах, таких как MSVC compiler
, и о том, как они ценят эту проблему, поскольку я хочу сделать свои библиотеки максимально совместимыми.
Я также нахожу объяснение дано в Википедии расплывчато, так как я не нахожу это ясным ВОЗ включает those parts of the library...
. Кроме того, выражение it is enough to include
не дает мне уверенности, что включен только и только необходимый код.
При связывании stati c достаточно включить те части библиотеки, на которые прямо или косвенно ссылается целевой исполняемый файл (или целевая библиотека). С динамическими библиотеками c загружается вся библиотека, так как заранее неизвестно, какие функции будут вызываться приложениями.