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

8

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

iBug
источник

Ответы:

8

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

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

soЯ полагаю, что эти буквы сокращенно означают «общий объект», и вы обычно будете видеть его как суффикс имени файла общих библиотек, то есть библиотек, которые могут динамически связываться с программами (одна библиотека «разделяется» между несколькими программами) , Напротив, статическая библиотека часто имеет суффикс имени файла .aдля «архива» (созданного arутилитой).

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

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

Смотрите руководства для ldи ld.soв вашей системе.

Кусалананда
источник