ros2无法通过加动态库的方法对某一个节点实现添加订阅主题吗,我尝试将create_publisher和create_subscriber函数放到动态库中,当只有一个动态库的时候可以正常运行,但是多几个动态库后,程序出现段错误,错误行在create_publisher或create_subscriber函数上
// 节点构造部分代码
string interface_path = "/opt/user/interface";
for (const auto& iter : boost::filesystem::directory_iterator(interface_path)) {
if (iter.path().extension() != ".so")
continue;
void *handle = dlopen(iter.path().string().c_str(), RTLD_LAZY );
Add add = NULL;
add = (Add)dlsym(handle,"add");
if (add == NULL) {
dlclose(handle);
continue;
}
add(shared_from_this(), _mqtt_proc, &_global_db);
dlclose(handle);
}
// 动态库中部分代码
extern "C" void add(rclcpp::Node::SharedPtr node, MqttProc *mqtt_proc, database_t *global_db)
{
// ros pub define
_pub1 = node->create_publisher<std_msgs::msg::String>("/topic1", 1);
// ros sub
_sub1 = node->create_subscription<std_msgs::msg::String>("/topic2", 1, callback);
}
gdb堆栈打印如下