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