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命令安装后,又手动编译安装,两者不在同一文件夹,且版本冲突?或许是。
网上没有相关资料,遂书录于此给后来者查看