Почему некоторые статические библиотеки (lib * .a) могут быть связаны так же, как общие библиотеки (lib * .so) связаны (переключатель ld -l), а некоторые нет?
Меня всегда учили, что все библиотеки, статические или нет, могут быть связаны с -l ..., однако я натолкнулся на одну библиотеку (GLFW), которая ничего не делает, кроме как выдает ошибки ссылки "неопределенная ссылка"если я попытаюсь связать его таким образом.
Согласно ответу на этот вопрос , "правильный" способ связать статические библиотеки - включить их напрямую вместе с моими собственными объектными файламивместо использования -l.И, в случае библиотеки GLFW, это, безусловно, решает проблему.Но любая другая статическая библиотека, которую я использую, прекрасно работает, когда она связана с -l.
Итак:
- Что может привести к тому, что эта библиотека не будет работать, когда связана, а не включена напрямую?Если бы я знал причину, возможно, я мог бы отредактировать и перекомпилировать библиотеку, чтобы исправить проблему.
- Правда ли, что вы не должны связывать статические библиотеки так же, как вы связываете общие библиотеки?(А если нет, то почему нет?)
- Может ли компоновщик по-прежнему удалять неиспользуемые библиотечные функции из выходного исполняемого файла, когда библиотека напрямую включена таким способом?