我的 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/