Как в CMake слинковаться с динамической библиотекой из сабмодуля? Всем привет,
Возникла следующая проблема. Есть проект, который собирается cmake'ом, структура его примерно такая:
add_subdirectory(foo_lib) // тут строится динамическая библиотека
add_subdirectory(foo_app) // тут строится приложение, которое использует foo_lib
в foo_app библиотека линкуется примерно так:
target_link_libraries(foo_app ... foo_lib)
И вот тут в случае, если foo_lib собирается в статическую либу, то все работает корректно, но в случае, когда она является динамической библиотекой, при сборке foo_app линкер падает с undefined reference для методов из foo_lib.
Кто-то сталкивался с подобным и быть может знает, как корректно похендлить пути для динамических библиотек собирающихся в рамках того же проекта?
Заранее спасибо.

21 Авг 2019 в 06:22
244 +1
0
Ответы
1

Для того чтобы слинковаться с динамической библиотекой из сабмодуля в CMake, необходимо правильно настроить пути к динамической библиотеке при линковке приложения.

Один из способов сделать это - использовать переменную CMAKE_CURRENT_BINARY_DIR для указания пути к сгенерированным файлам сабмодуля. Например, если вы собираете динамическую библиотеку в сабмодуле foo_lib, то в файле CMakeLists.txt вашего приложения foo_app можно добавить следующую строку:

target_link_libraries(foo_app ${CMAKE_CURRENT_BINARY_DIR}/foo_lib/foo_lib)

Это укажет CMake использовать динамическую библиотеку из подпапки foo_lib, которая была сгенерирована во время сборки проекта.

Также важно убедиться, что пути к сгенерированным файлам правильно настроены в вашем проекте, например, через переменные CMAKE_BINARY_DIR или другие подходящие переменные CMake.

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

20 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир