Моя программа на С ++ имела ошибки времени выполнения (сбой при блокировке мьютекса). Исключения, которые исходили не из моего кода, а из некоторых библиотек, которые он использовал. Я начал отслеживать проблему и обнаружил, что у меня есть библиотека (giskard_core, но это не имеет значения), перечисленная в CMakeLists.txt
в find_package(catkin REQUIRED COMPONENTS ... giskard_core)
который я не использовал в данный момент. Комментируя это, я обнаружил, что произошла авария. Потянув его обратно к find_package
список вернул аварию.
Мой код был действительно простым, буквально просто основной функцией и голыми приложениями ROS, и, конечно, не использовал библиотеку, которая вызывала проблемы.
Что здесь происходит? Может ли пакет принести ошибку, просто будучи перечисленным в find_package
в CMakeLists.txt
?
Я подозреваю, что ваш код, вероятно, имеет ошибку в том, как он реализует вещи в стиле catkin. Поскольку он на самом деле компилируется без этого проекта, я также подозреваю, что у него есть некоторые препроцессорные средства защиты, которые включаются только тогда, когда обнаружен catkin.
Существует ли что-то подобное в вашем CMakeLists.txt?
if (Catkin_FOUND)
add_definitions(-DCATKIN_FOUND)
endif (Catkin_FOUND)
Также существует что-то подобное в вашем коде?
#ifdef CATKIN_FOUND
mutex.lock()
#endif
Если это так, это может объяснить проблемы, которые вы видите. Вам нужно будет исправить использование любой функциональности Catkin, которую реализует ваш проект.
Других решений пока нет …