Linux编译安装libmodbus库
下载libmodbus库源码
git clone git://github.com/stephane/libmodbus
若报错:fatal: Unable to look up github.com (port 9418)
报错如下
fatal: Unable to look up github.com (port 9418) (未知的名称或服务)
使用如下命令清理缓存
npm cache clean --force
清理完缓存就可以下载了,新建一个文件夹modbus并下载
若报错:The unauthenticated git protocol on port 9418 is no longer supported.
报错如下
(可能的)解决方案为:
- 项目clone有问题的,改用https协议或者ssh
- npm安装有问题
这里解决办法为:把git换为https
sudo git clone https://github.com/stephane/libmodbus
安装
下载好后会出现一个libmodbus的文件夹在当前目录下
cd libmodbus
还需要安装libtool工具
sudo apt-get install libtool
然后执行autogen.sh文件
sudo ./autogen.sh
报错
原因:没有安装automake工具,执行下面命令安装
sudo apt install autoconf automake libtool
再次执行autogen.sh文件
配置
接着配置,在libmodbus文件夹里新建一个install文件夹用来存放编译生成的相关文件
sudo mkdir install
执行配置
./configure --prefix=/home/xxx123/modbus/libmodbus/install
///home/xxx123/modbus/libmodbus/install为安装路径
编译
执行make&&make install命令
make&&make install
或
make
make install
报错
搜了一圈没找到解决办法,直觉地去找前面命令的执行情况,发现在执行下面这条命令时因为没加sudo
./configure --prefix=/home/xxx123/modbus/libmodbus/install
导致最后有部分工作没有完成
重新加sudo执行后可以看到执行完应该为下图这样
再执行make&&make install命令完成编译过程
也要加sudo
但是即使加了sudo最后也会报错
很明显这是因为sudo只对make命令产生了作用,解决办法为分开命令执行,也可以像野火执行echo命令屏蔽串口打印信息那样(见野火Linux教程)给整个命令加引号(本人没试过自行尝试),执行成功后如下
编译成功后,在刚刚创建的install文件夹下,会输出include头文件以及lib库文件
将lib下的3个动态库libmodbus.so.x.x,项目所在环境的/usr/lib目录
sudo cp -r ./install/lib/libmodbus.so* /usr/lib
若出现错误:-bash: make: command not found
原因分析:一般出现这个-bash: make: command not found提示,是因为安装系统的时候使用的是最小化mini安装,系统没有安装make、vim等常用命令,直接sudo apt-get install安装下即可。解决方法
sudo apt-get update(非必须)
sudo apt-get install gcc automake autoconf libtool make
接下来可以执行sudo make命令了
若sudo make命令后报错:/bin/bash: …/libtool: No such file or directory
解决办法,重新执行
sudo apt install autoconf automake libtool
sudo ./autogen.sh
需要出现下图
此时再执行sudo make即可
若编译完成后在install文件夹下没有发现include头文件以及lib库文件
尝试重启系统或重新登录系统,我这里重新登录野火imx6ull开发板,重新登录后发现已经有了
使用
将 /modbus/libmodbus/install/include/ 文件夹下的头文件都拷贝到 /modbus/ 文件夹下(与应用程序同级目录)
//进入到/modbus/目录下执行
sudo cp ./libmodbus/install/include/modbus/modbus* ./
在项目makefile文件中 -L./lib -lmodbus 在调用函数的c文件中引入.h文件
gcc -o xxx xxx.c -L. -lmodbus
如:sudo gcc -o tcpslave tcpslave.c -L. -lmodbus