最近尝试利用Qt制作客户端界面,但查阅文献发现其自带modbus通讯库无法满足我所需的实时性,所以尝试配置第三方库libmodbus。作为新人,我在配置过程中遇到较多问题,浪费三天方才解决,网络上的众多博客对于我这个菜鸟新人不是很友好,故将我的环境编译配置过程详细记录于此,希望后面的新人只用一篇文章方可解决!
libmodbus作为跨平台的开源库,在不同系统下需要对源文件进行编译才能使用,我使用的Windows所以只查阅了这一方面的知识。Windows系统下的编译方式主要有两种:①利用MSYS和MinGW对其编译 ②利用VS对齐编译,其中第一种是主流方式,下面开始记录编译步骤(两种方式本菜鸟都试过,一开始都失败了,最后是用第一种方式解决)。
方法一:源文件地址:https://github.com/stephane/libmodbus
方法二:libmodbus官网:https://libmodbus.org/
ps:方法二只是防止方法一的登入失败,进入libmodbus官网后也是跳转进入github里
找到下载路径后,将libmodbus-master压缩包解压
(1)下载
下载地址:https://www.msys2.org/
点击链接直接下载,这一步会比较慢,可以利用迅雷等工具
(2)安装
双击下载好的.exe文件开始安装
除了安装位置根据个人喜好修改(不要有中文),其余步骤直接点击下一步即可。
安装位置根据自己喜好即可,安装路径最好不要有中文(有中文的情况我没有试)
(3)解决MSYS的 软复制问题
这一步对于只是编译libmodbus库无用,故不作细讲。
详细可参考:https://blog.csdn.net/hustlei/article/details/86687588
(4)配置国内镜像源
进入安装目录下的pacman.d文件夹,我们需要修改如下图的三个文件夹的部分程序
将这三个文件用记事本打开,分别将Primary部分的程序修改如下:
mirrorlist.mingw32文件
## 2-bit Mingw-w64 repository mirrorlist
## Primary
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
mirrorlist.mingw64文件
## 64-bit Mingw-w64 repository mirrorlist
## Primary
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
Server = http://mirror.bit.edu.cn/msys2/REPOS/
mirrorlist.msys文件
## MSYS2 repository mirrorlist
## Primary
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
(1)在开始菜单找到MSYS选择 MINGW64 方式打开
(2)更新msys2,在命令行里输入pacman -Syu
pacman -Syu
如图所示:
输入完成后按一下enter(回车)键,在提示后面输入Y并按一下enter(回车)键,如图所示
之后会提示更新完成,需要关闭MSYS方可成功,如下图输入Y后按下回车键,MSYS会自动关闭
(3)如步骤(1)所示重新打开MSYS, 输入如下代码安装gcc,其方法与步骤(2)相似
pacman -S mingw-w64-x86_64-gcc
(4)输入如下代码安装automake
pacman -S automake
(5)输入如下代码,安装libtool
pacman -S libtool
至此完成libmodbus编译所需文件的安装,接下来对其进行编译。
(1)根据自己之前的解压路径,打开libmodbus的解压文件,注意到里面的autogen.sh文件。
(2) 在MSYS里进入该路径,我这里的路径如上图所示是 D/libmodbus-master,所以我在MSYS里输入
cd /D/libmodbus-master
进入之后,MSYS会有黄色字体提示,之后输入 ./autogen.sh (图中第二个框内容错误,应该是此处的./而不是cd)编译生成configure文件,如下图所示:
上图中的"cd autogen.sh"输入错误,应该为下方第二个图所示的"./autogen.sh"。在这一步有的电脑可能报告运行失败,此时需要先运行"pacman -S autoconf-wrapper"安装所需库
运行完后再输入"./autogen.sh" :
(3)等待程序编译运行完成,此时界面会提示可以运行configure了。接着我们输入 ./configure ,注意此时无需输入cd,如下图所示:
运行完成后如下图所示
(4)至此完成了对libmodbus在Windows下的编译过程
完成libmodbus的编译后,下面是介绍如何将其导入Qt中使用,因本人刚刚接触,具体细节尚未实践,所以可能有点问题,请各位指正。
(1)新建一个文件夹,将其命名为“libmodbus”以便于后续第三方程序对其调用。
(2)打开libmodbus-master文件,下划找到configure.h后将其复制进入libmodbus文件
(3)打开libmodbus-master下的src文件夹,,将文件内的所有.h和.c文件都复制进入libmodbus文件夹内
(4)完成后libmodbus内文件的截图如下所示
(5)复制libmodbus文件进入所需的Qt项目的文件夹内,与.pro文件同一级目录
打开系统盘(C盘),在右上角搜索框中输入“ws2_32.dll”,查询到后将其复制进入Qt项目的文件夹内,与.pro文件同一级目录,我这里查询到4个同名文件,具体用哪个我也不确定就直接选择了最大的这个,后面测试是可以的
复制后结果如下:
3、Qt Creator项目中程序的添加
(1)双击.pro文件打开项目,在左上角项目名处单机鼠标右键,之后左键单击 “添加现有文件”
(2)此时会弹出项目的存储文件夹,打开之前复制进来的libmodbus文件夹
(3)选中文件夹内所有文件,点击打开
Qt会自动将 .c 和.h文件分类
(4)Qt项目里需要用到libmodbus的窗口的.h文件里加入 #include
Ps:有的教程是在libmodbus里新建一个“inc”文件夹放所有.h文件,则此时的路径应该为 #include
(5)双击打开.pro文件
在文件中加上 LIBS += -Ldll -lws2_32,结果如下:
(6)至此,libmodbus库成功导入进Qt Creator。
主要参考文章:
libmodbus 在windows端的Qt的使用 - WTUH - 博客园 (cnblogs.com)
在windows上安装配置msys2_msys2 32位_hustlei的博客-CSDN博客
如何在mingw环境下使用libmodbus库_哔哩哔哩_bilibili