CMake: Как элемент в find_package может сломать программу?

Моя программа на С ++ имела ошибки времени выполнения (сбой при блокировке мьютекса). Исключения, которые исходили не из моего кода, а из некоторых библиотек, которые он использовал. Я начал отслеживать проблему и обнаружил, что у меня есть библиотека (giskard_core, но это не имеет значения), перечисленная в CMakeLists.txt в find_package(catkin REQUIRED COMPONENTS ... giskard_core) который я не использовал в данный момент. Комментируя это, я обнаружил, что произошла авария. Потянув его обратно к find_package список вернул аварию.
Мой код был действительно простым, буквально просто основной функцией и голыми приложениями ROS, и, конечно, не использовал библиотеку, которая вызывала проблемы.

Что здесь происходит? Может ли пакет принести ошибку, просто будучи перечисленным в find_package в CMakeLists.txt?

1

Решение

Я подозреваю, что ваш код, вероятно, имеет ошибку в том, как он реализует вещи в стиле catkin. Поскольку он на самом деле компилируется без этого проекта, я также подозреваю, что у него есть некоторые препроцессорные средства защиты, которые включаются только тогда, когда обнаружен catkin.

Существует ли что-то подобное в вашем CMakeLists.txt?

if (Catkin_FOUND)
add_definitions(-DCATKIN_FOUND)
endif (Catkin_FOUND)

Также существует что-то подобное в вашем коде?

#ifdef CATKIN_FOUND
mutex.lock()
#endif

Если это так, это может объяснить проблемы, которые вы видите. Вам нужно будет исправить использование любой функциональности Catkin, которую реализует ваш проект.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector