# libmodbus编译程序找不到modbus_mapping_new_start_address()函数

文章描述了在使用libmodbus时遇到的问题,编译程序找不到`modbus_mapping_new_start_address()`函数,尽管该函数在头文件中声明。问题可能出在不同版本的库文件冲突上,解决方案是在特定目录下删除特定库文件。
摘要由CSDN通过智能技术生成

libmodbus编译程序找不到modbus_mapping_new_start_address()函数

​ 基于libmodbus编写的从站对内存映射的赋值语句:

mb_mapping = modbus_mapping_new(500, 500, 500, 500);
if (mb_mapping == NULL) {
    fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno));
    modbus_free(ctx);
    return -1;
}
for(int i = 0; i < 500; i++)
{
    mb_mapping->tab_registers[i] = values[i];
}

​ vscode编译不报错,运行报segmentation fault:
在这里插入图片描述

​ Linux命令行编译正常,运行报错:段错误 核心已转储;

无其他错误提示信息

​ 交叉编译下载到开发板后程序正常运行,更换其他电脑也可以正常运行,唯独在手上这台电脑运行报错。阅读libmodbus源码,将modbus_mapping_new()函数更换为modbus_mapping_new_start_address(),编译报错找不到modbus_mapping_new_start_address(),但在modbus.h文件中有声明

怀疑是环境问题,即modbus.h中有,但调用的库中没有,使用sudo apt-get remove卸载后重新编译安装libmodbus依旧如此。

解决方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/usr/lib和/usr/lib/x86_64-linux-gnu中都存在libmodbus的库文件,删除/usr/lib/x86_64-linux-gnu中的上述三个文件即正常。

原因:可能是install命令安装后,又手动编译安装,两者不在同一文件夹,且版本冲突?或许是。

网上没有相关资料,遂书录于此给后来者查看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值