libc.so
- это скрипт компоновщика , небольшой текстовый файл, который выглядит следующим образом (строки для удобства чтения):
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP (
/lib/x86_64-linux-gnu/libc.so.6
/usr/lib/x86_64-linux-gnu/libc_nonshared.a
AS_NEEDED ( /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 )
)
Он инструктирует редактор ссылок (ld
, который вызывается при компоновке во время сборки, т. Е. Не динамический компоновщик) искать символы сначала в libc.so.6
, общем объекте, затем в libc_nonshared.a
, если не может найдите его и, наконец, в динамическом загрузчике, ld-linux-x86-64.so.2
). Это используется для реализации определенных функций, например, в более новых версиях glibc, чувствительной к вызывающей стороне функции pthread_atfork
(которая должна быть связана статически, поэтому она помещается в libc_nonshared.a
, а не libc.so.6
). Сценарий компоновщика обычно вызывается неявно командами gcc
или g++
, но иногда вы видите командные строки, содержащие -lc
, и те, которые принимают сценарий libc.so
(при динамическом связывании).
Скрипт компоновщика используется только во время сборки. Если ваш образ содержит библиотеки разработки, такие как libsqlite3-dev
, необходимо включить libc6-dev
(или как называется пакет, предоставляющий скрипт компоновщика libc.so
), поскольку libsqlite3-dev
не может использоваться для связывания новых программ и общих объектов без glibc.