При связывании программы с общим объектом ld
гарантирует, что символы могут быть разрешены. Это в основном гарантирует совместимость интерфейсов между программой и ее общими объектами. Прочитав Linking with dynamic library with dependencies, я узнал, что ld
спустится в связанные общие объекты и попытается разрешить их символы.Не проверяется ли ld проверка нерешенных символов в общих библиотеках?
Не связаны ли ссылки моего общего объекта, когда сами связанные объекты связаны?
Я могу понять привлекательность выяснения во время ссылки, есть ли у программы все части, которые она требует для начала, но кажется ли это неактуальным в контексте создания пакетов, где общие объекты могут быть распределены отдельно (Debian's lib * пакеты, например). Он вводит рекурсивные зависимости построения для систем, не заинтересованных в выполнении встроенных программ.
Могу ли я доверять зависимостям, разрешенным при создании общего объекта? Если да, то насколько безопасно использовать - unresolved-symbols = ignore-in-shared-libs при создании моей программы?
С тестами, которые я выполнил, у меня осталась ссылка на показы при создании общего объекта. Мне стало интересно, почему это не так, но в случае, представленном @yugr, проверка ссылок, когда библиотеки строятся, приведет к проблеме курица и яйцо. – elik