CMake:find_package中的项目如何破坏程序?

时间:2017-07-29 15:02:06

标签: c++ cmake mutex catkin

我的c ++程序出现运行时错误(互斥锁死机崩溃)。异常不是直接来自我的代码,而是来自它使用的一些库。我开始追查问题并发现我在CMakeLists.txt find_package(catkin REQUIRED COMPONENTS ... giskard_core)中列出了一个库(giskard_core,但无关紧要),我目前没有使用它。评论它修复了我正在调查的崩溃。将其拉回find_package列表会导致崩溃。 我的代码非常简单,只是一个主要功能和ROS应用程序的骨干,当然没有使用导致问题的库。

发生了什么事?只是在find_package中的CMakeLists.txt中列出了包,是否会导致错误?

1 个答案:

答案 0 :(得分:0)

我怀疑你的代码可能在如何实现catkin内容时出错。由于它实际上是在没有该项目的情况下进行编译,我还怀疑它有一些预处理器防护装置只有在找到catkin时才会启用。

您的CMakeLists.txt中是否存在类似的内容?

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

您的代码中是否还存在类似的内容?

#ifdef CATKIN_FOUND
  mutex.lock()
#endif

如果是这样,那可以解释您所看到的问题。您需要修复项目实施的任何Catkin功能的使用。