Соберите пару ключ-значение в JSON как CLI

По крайней мере, в библиотеке GNU C связывание содержит информацию о версии для каждого отдельного символа (функции и т. д. ), которые используются. Вы можете увидеть это с помощью objdump -T; например, на /bin/lsя получаю

DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.3   __ctype_toupper_loc
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __uflow
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 getenv
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sigprocmask
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.3.4 __snprintf_chk
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 raise
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 abort

и т. д.

Разработчики библиотеки C делают все возможное, чтобы обеспечить обратную совместимость библиотеки C. Приведенный выше вывод означает, что для lsтребуется __ctype_toupper_locиз библиотеки C версии 2.3 или более поздней и т. д. Любая библиотека C, которая предоставляет все необходимые символы, сможет запустить данный двоичный файл; и любая данная версия библиотеки GNU C предоставляет реализации всех символов, которые когда-либо предоставлялись более старой версией библиотеки C (, восходящей к 1997 году ).

Другой способ обработки вещей, используемый большинством библиотек в системах на основе Linux -(, фактически, в системах на основе ELF -и других ), — это soname. Каждая библиотека определяет не только свое имя, но и номер версии, который меняется всякий раз, когда вносятся критические изменения (в некоторых случаях, чаще ). Несколько версий библиотек с разными именами могут быть установлены параллельно; например

-rw-r--r--  1 root root  2500416 Dec 16 21:07 libcrypto.so.1.0.2
-rw-r--r--  1 root root  2711616 Nov 28 23:43 libcrypto.so.1.1

(Это также используется библиотекой C, о чем свидетельствует имя зависимости, libc.so.6— но последний скачок soname библиотеки GNU C произошел много лет назад.)

Чтобы ответить на вопрос в вашем заголовке, можно статически связать библиотеку C, но это редко бывает необходимо или полезно (и может привести к путанице, поскольку некоторые части библиотеки C динамически связаны, даже если библиотека C статически связаны ).Может быть полезно связать другие библиотеки статически. Другие языки используют другие подходы, и, например, программы Go статически компонуются.

0
17.06.2020, 15:54
0 ответов

Теги

Похожие вопросы