Настройка и работа в Linux
adb5321d

Библиотека GNU C


  • 5.1 Настройка
  • 5.2 Упражнения
  • 5.3 Дополнительные сведения

  • Следующей, после загрузки ядра, вещью, является запуск процесса init. Однако init, подобно другим программам, использует вызовы функций из системных библиотек.

    Вы наверняка знакомы с демо-программами похожими на эту:

    main() { printf("Hello World!\n"); }

    Программа не содержит определения функции printf, так откуда она её вызывает? Функция берется из стандартной библиотеки C, в системе GNU/Linux это glibc. Если вы скомпилируете её под Visual C++, функция будет взята из стандартной библиотеки реализации Microsoft. Существуют зиллионы стандартных функций для математических и строковых операций, манипулирования датой/временем, оперативной памятью и т.д. и т.п. Всё в мире Unix (включая Linux) либо написано на C либо старается быть написанным, так что всё использует эти функции.

    Если вы заглянете в /lib на вашей Linux машине, вы обнаружите множество файлов libsomething.so или libsomething.a

    и т.п. Это библиотеки таких функций. Glibc является просто реализацией этих функций проектом GNU.

    Для программ существует два способа использования библиотечных функций. Если программа собирается статически, эти функции будут скопированы в создаваемый исполняемый код. Код при этом будет взят из библиотеки типа libsomething.a. Если программа собирается динамически, (что происходит по умолчанию) эти функции будут загружаться при выполнении программы по мере надобности. При этом будет использован код из файлов типа libsomething.so.

    Команда ldd будет вашим помощником, если вам понадобится выяснить какие библиотеки нужны для работы некоторой программы. В качестве примера приведу список библиотек необходимых для запуска bash:

    [greg@Curry power2bash]$ ldd /bin/bash libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000) libc.so.6 => /lib/libc.so.6 (0x4001d000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)



    Содержание раздела