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