注意:首先,我的代码可以编译成功。如果我只是运行代码,那就没问题了。但如果我在调试模式下运行,错误会合并到
ros::NodeHandle node
行中。具体来说,代码在_M_initialize()
中的函数/usr/include/c++/6/bits/stl_tree.h
之后停止(我尝试了c++ 9,但没有成功)。好像无法初始化内存?
我的笔记本也出现同样的问题(ubuntu 20.04)。但在我的另一台装有 ubuntu 16.04 的计算机上,代码在调试模式下运行。
我在这个问题上花了一个多星期,但还没有找到有用的解决方案。如果有人可以帮助解决这个问题,我将不胜感激。请。
我发现原因是我执行
ros::init(argc, argv, "mpccontrol")
后,没有通过wachingrosnode list
初始化的rosnode。
但我仍然不知道如何解决这个问题。为什么ros::init()
正常执行,但在调试模式下却初始化了一个rosnode。
我的电脑信息: Ubuntu 20.04(我也尝试过buntu 22.04和18.04,也有同样的问题) qt Creator 5.9.4(我也尝试过5.12,没用) gdb 9.2(我也尝试过gdb 8.2) 海湾合作委员会 6.4.0 cmake 3.16.3
我的测试代码如下:
#include <iostream>
#include <ros/ros.h>
using namespace std;
int main(int argc, char *argv[])
{
ros::init(argc, argv, "mpccontrol");
ros::NodeHandle node;
ros::Rate loop_rate(10);
cout << "Hello World!" << endl;
int count = 0;
while (ros::ok()) {
cout << "******************* publish successfully ************" << endl;
count ++;
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
我的
.pro
:
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
CONFIG( debug|release){
OBJECTS_DIR = .obj
TARGET = rosTest
}
# #==================== config ros ==================
INCLUDEPATH += /opt/ros/noetic/include \
./message \
DEPENDPATH += /opt/ros/noetic/include \
./message \
#LIBS += -L /usr/local/lib \
# -L/usr/local/lib64\
LIBS += -L/opt/ros/noetic/lib -lroscpp -lrospack \
-lpthread -lrosconsole -lrosconsole_log4cxx \
-lrosconsole_backend_interface -lxmlrpcpp \
-lroscpp_serialization -lrostime -lcpp_common \
-lroslib -lyaml-cpp -lkdl_conversions
SOURCES += main.cpp \
NodeHandleTest.cpp
HEADERS += \
NodeHandleTest.h
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
我尝试过更改系统版本:ubuntu 18.04/ 20.04/ 22.04。看来这个问题和系统版本没有关系
我尝试过更改gdb版本,但不起作用。
我尝试过更改qt Creator版本。
我通过将 qt Creator 版本更改为 5.12.12 解决了这个问题(下载:https://www.qt.io/offline-installers)。
再次感谢约翰和 BTables。