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

标签 c++ cmake mutex catkin

我的 C++ 程序有运行时错误(互斥锁崩溃)。异常不是直接来 self 的代码,而是来自它使用的某些库。我开始追查问题,发现我在 find_package(catkin REQUIRED COMPONENTS ... giskard_core ) 我目前没有使用。评论它修复了我正在调查的崩溃。将其拉回 find_package 列表使崩溃再次发生。 我的代码非常简单,从字面上看只是一个主要功能和 ROS 应用程序的骨架,并且肯定没有使用导致问题的库。

这是怎么回事?仅在 CMakeLists.txt 中的 find_package 中列出包会带来错误吗?

最佳答案

我怀疑您的代码在实现 catkin 东西的方式上可能存在错误。因为它实际上是在没有那个项目的情况下编译的,所以我还怀疑它有一些预处理器防护,只有在找到 catkin 时才会启用。

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

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

您的代码中是否也存在类似的东西?

#ifdef CATKIN_FOUND
  mutex.lock()
#endif

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

关于c++ - CMake:find_package 中的项目如何破坏程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45390714/

相关文章:

c++ - C++ socket.http 中嵌入的 LUA [错误 : attempt to call a nil value]

c++ - 什么是 C++ 中的 <=> ("spaceship",三向比较)运算符?

opengl - 如何使用 cmake 在 OSX 上链接 libGL?

cmake - 传递编译器选项 cmake

boost - libboost1.74-dev 未安装在 Ubuntu 16.04 上

c++ - 互斥量不起作用

c++ - Mutex 无法获取锁

javascript - 锁还是不锁

c++ - 具有显式构造函数的智能指针让我出错

c++ - 所有文件的 Makefile