Некоторые библиотеки загружаются динамически и доступны через указатели функций.В этих случаях библиотеки не должны быть явно связаны во время компиляции.Другие библиотеки могут быть статически связаны, если они не требуют динамической загрузки, но связывание выполняется во время компиляции.Тогда есть некоторые библиотеки, которые связаны во время компиляции, но они просто предоставляют простой в использовании интерфейс для процесса динамической загрузки.Хорошим примером этого является таблица адресов импорта в файлах Win32 PE.Например, вызов библиотеки NtTerminateProcess находится в библиотеке ntdll.Вы можете динамически вызывать NtTerminateProcess, вызывая LoadLibrary и GetProcAddress, или вы можете связать его во время компиляции, что создаст для вас интерфейс;Тем не менее, ntdll все равно необходимо динамически загружать во время выполнения.Связывание этого времени компиляции не было статичным, оно просто позволяло вам вызывать NtTerminateProcess без использования LoadLibrary / GetProcAddress.
Таким образом, вопрос сводится к разнице между статическими ссылками, что делает opengl.Или динамическое связывание, которое требуется для sdl.И, как я упоминал ранее, динамическая загрузка, которая во время выполнения выделяет память для загружаемого модуля и загружает его по адресу, указанному в ОС.Уже есть публикация, которая немного освещает это:
Разница между статической связью и динамической связью
разница между динамической загрузкой и динамической связью?
При статическом связывании, если ваша библиотека когда-либо изменится, вам нужно будет перекомпилировать двоичный файл.В случае динамического связывания, вам не нужно перекомпилировать двоичный файл только DLL.