У нас странная проблема при связывании разделяемой библиотеки (Foo) с другой внутренней статической библиотекой (Bar).Библиотеки ботов собраны на одном компьютере в одном и том же каталоге сборки CMake.
Очевидно, что код в разделяемых библиотеках должен быть независимым от позиции, поэтому мы устанавливаем PIC для любых статических зависимостей библиотек, например:
set_property(TARGET Bar PROPERTY POSITION_INDEPENDENT_CODE True)
И мы связываем библиотеку обычным способом, используя target_link_libraries(Foo PUBLIC Bar)
.
. Это прекрасно работает с GCC 4.8, ld 2.22 и CMake 3.10.1.
Однако дляпо какой-то причине с GCC 7, ld 2.29.1 и CMake 3.10.2 не удается установить соединение с множественными ошибками undefined reference
для различных функций в Bar.Функции определены и реализованы в Bar, используются Foo и все компилируется с GCC4.8.Итак, что дает?
Мы также знаем о двойной ситуации ABI и потенциальных проблемах с std::string
.(См. https://stackoverflow.com/a/49119902/2095190) Однако ошибка не соответствует шаблону.
У меня есть некоторые мысли, хотя ни одна из них не объясняет, почему она работает со старым набором инструментов:
Наш проект относительно сложен, я постараюсь выделить ошибку на следующей неделе.