Правильный способ связать статическую библиотеку с помощью GCC

Почему некоторые статические библиотеки (lib * .a) могут быть связаны так же, как связаны общие библиотеки (lib * .so) (ключ ld -l), а некоторые нет?

Меня всегда учили, что все библиотеки, статические или нет, могут быть связаны с -l ..., однако до сих пор я сталкивался с одной библиотекой (GLFW), которая ничего не делает, кроме как выдает ошибки ссылки "undefined reference", если я попытаться связать это таким образом.

Согласно ответу наэтот вопрос«правильный» способ связать статические библиотеки - включить их напрямую, вместе с моими собственными объектными файлами, вместо использования -l. И, в случае библиотеки GLFW, это, безусловно, решает проблему. Но любая другая статическая библиотека, которую я использую, прекрасно работает, когда связана с -l.

Так:

Что может привести к тому, что эта библиотека не будет работать, когда она связана, а не включена напрямую? Если бы я знал причину, возможно, я мог бы отредактировать и перекомпилировать библиотеку, чтобы исправить проблему.Правда ли, что вы не должны связывать статические библиотеки так же, как вы связываете разделяемые библиотеки? (И если нет, то почему?)Может ли компоновщик по-прежнему удалять неиспользуемые библиотечные функции из выходного исполняемого файла, если библиотека включена таким образом?

Ответы на вопрос(4)

Ваш ответ на вопрос