Да, вам нужны статические библиотеки для создания статически связанного исполняемого файла.
Статические библиотеки - это пакеты скомпилированных объектов. Когда вы статически связываетесь с библиотекой, это практически то же самое, что брать результаты компиляции этой библиотеки, распаковывать их в текущем проекте и использовать их, как если бы они были вашими собственными объектами.
Динамические библиотеки уже связаны. Это означает, что некоторая информация, такая как перемещение, уже исправлена и выброшена.
Кроме того, динамические библиотеки должны быть скомпилированы как позиционно-независимый код. Это не является ограничением для статических библиотек и приводит к значительной разнице в производительности на некоторых распространенных платформах (например, x86).
Существуют такие инструменты, как ELF Statifier , которые пытаются объединить динамически связанные библиотеки в динамически связанный исполняемый файл, но при любых обстоятельствах очень трудно создать правильно работающий результат.