Какой код входит в окончательный исполняемый файл при использовании библиотеки?
Например, у нас есть два файла:
/*main.c*/
int main (int argc, char* argv[]){
fc(1); /*This function is defined in fc.c*/
}
Другой файл:
/*fc.c*/
int fc(int x){
return fe(x);
}
int fe(int y){
return y + 1;
}
Собираем fc.c:
gcc -c fc.c
Тогда мы получаем fc.o.
Теперь давайте создадим библиотеку с именем test:
ar rcs libtest.a fc.o
Теперь у нас есть libtest.a.
Теперь компилируем main.c
gcc -c main.c
И получаем main.o
Давайте свяжем наш main.o с нашим libtest.a
гкк-л. main.o -ltest
Получаем искомый a.out
Проверка его символов:
нм a.out
Между всеми символами мы находим:
080483cc T fc
080483df T fe
Выглядит неплохо. НО!
Если наш main.c изменится для этого?
/*main.c*/
int main (int argc, char* argv[]){
fe(1); /*This function is defined in fc.c*/
}
После компиляции main.c и привязки нового main.o к нашей библиотеке я все равно найду символ для fc. Но мне этот код не нужен.
Вопросы
-Разве библиотека не должна "давать мне" только тот код, который мне нужен в main.c?
-Должны ли функции быть в отдельных модулях перед добавлением в библиотеку?
-Что, если бы у меня было 300 функций ? Нужно ли мне делать 300 модулей?