Когда я перешел от использования GNU ld версии 2.20 до 2.21, я начал видеть следующее изменение в поведении. Не уверен, что это нарушение в 2.20, которое было исправлено в 2.21 или если что-то еще происходит.Изменение поведения gnu ld linker
libfoo.so : provides symbols foo()
libfoobar.so : provides symbol bar() and specifies libfoo.so in its DT_NEEDED slot
main.cpp : uses symbols foo() as well as bar()
Раньше я мог бы построить main.cpp, просто делая:
g++ main.cpp -lfoobar
Внутренняя зависимость foobar.so на foo.so будет гарантировать, что Foo(), а также бар() являются найдено
Теперь, выше не работает, и я должен явно связать Foo, а также:
g++ main.cpp -lfoobar -lfoo
так что мой Вопрос: Какое правильное поведение. Если у .so есть зависимости, то они учитываются при поиске символов, используемых непосредственно в исполняемом файле, или эти зависимости доступны в частном пространстве имен только для .so?
Спасибо.