Разница между «ld» и «ld.so»?

Разница между «ld» и «ld.so»?

Хотя оба называются "линкером" и используются для связывания двоичных файлов, я не могу понять, чем они отличаются друг от друга. Может кто-нибудь рассказать мне об их различиях?

решение1

Не вдаваясь в технические подробности: оба являются «линкерами», т.е. инструментами, которые объединяют/загружают фрагмент скомпилированного кода с/в другой фрагмент скомпилированного кода.

ldявляется статическим компоновщиком, а ld.soявляется динамическим компоновщиком.

Буквы so, как я полагаю, являются сокращением от "shared object", и вы обычно будете видеть его как суффикс имени файла общих библиотек, т. е. библиотек, которые могут быть динамически связаны с программами (одна библиотека "общая" для нескольких программ). Напротив, статическая библиотека часто имеет суффикс имени файла .a, от "archive" (создается утилитой ar).

Статический компоновщик связывает программу или библиотеку во время компиляции, обычно на последнем этапе процесса компиляции, создавая двоичный исполняемый файл или библиотеку. В случае двоичного исполняемого файла это может быть статический двоичный файл свсеБиблиотеки загружены в сам двоичный файл, или это может быть динамически связанный двоичный файл, в котором статически связаны только некоторые библиотеки.

Динамический компоновщик загружает библиотеки, которые были динамически скомпонованы во время компиляции, в адресное пространство процесса во время выполнения.

Ознакомьтесь с руководствами ldпо ld.soвашей системе.

Связанный контент