CMake Project "неопределенная ссылка" ошибка с GCC7, но не GCC4.8 - PullRequest
0 голосов
/ 28 марта 2019

У нас странная проблема при связывании разделяемой библиотеки (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) Однако ошибка не соответствует шаблону.

У меня есть некоторые мысли, хотя ни одна из них не объясняет, почему она работает со старым набором инструментов:

Наш проект относительно сложен, я постараюсь выделить ошибку на следующей неделе.

...