modbus调试工具开发(1)--windows下编译libmodbus库文件
近期准备开始一个新的项目,主要的内容就是制作一个类似于modbus pull 和modbus slave 的windows软件,可以作为modbus的主站和从站,初步设想是实现modbus tcp 的全部功能。计划使用QT 开发图形化界面,调用libmodbus动态库文件。
本项目会放到gitee 地址为:
https://gitee.com/jeasonb/libmodbus
编译动态库计划使用cmake + mingw 实现。
第一步就是从github上拿到libmodbus 的源码使用git bash工具 克隆代码到本地。
git clone https://github.com/stephane/libmodbus.git
拿到代码之后可以看一下目录结构,其中最核心的代码就是src 路径下的几个文件
这篇博客的主要内容就是记录如何将这些文件编译成dll 文件。
第一步就是将需要用到的文件拖到一起,主要就是上图的那些c 文件和对应的头文件。并且创建一个cmake 的配置文件。编写配置文件
cmake_minimum_required(VERSION 3.1 FATAL_ERROR) ## Set project information
project(libmodbus LANGUAGES C) # 设置语言
include(cmakes/BuildDefaults.cmake) #一些编译选项include_directories( #添加头文件包含路径../src/
)
add_library(modbus SHARED #关键步骤,设置动态库的文件./src/modbus-data.c./src/modbus-tcp.c./src/modbus-rtu.c./src/modbus.c
)target_link_libraries(modbus # 因为是需要依赖socket 所以需要链接windows的socket库ws2_32.dll
)
add_executable(app #测试的demo 简单的测试函数的功能是否有效./test/main.c
)target_link_libraries(app modbus) # 测试代码需要动态链接的库
# src targets.
在进行代码迁移的过程中遇到了以下的几个问题,第一个问题是libmodbus 的版本号 未定义,个人猜测这个应该是会用自动运行脚本去将version.h 文件中指定的字段替换,本人懒得去研究自动生成的脚本,就直接将version.h 中的版本号等 随意改了一下。。。。。。。。。
大致改成这样
/** Copyright © 2010-2014 Stéphane Raimbault <stephane.raimbault@gmail.com>** This library is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.** This library is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public* License along with this library; if not, write to the Free Software* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA*/#ifndef MODBUS_VERSION_H
#define MODBUS_VERSION_H/* The major version, (1, if %LIBMODBUS_VERSION is 1.2.3) */
#define LIBMODBUS_VERSION_MAJOR 1/* The minor version (2, if %LIBMODBUS_VERSION is 1.2.3) */
#define LIBMODBUS_VERSION_MINOR 1/* The micro version (3, if %LIBMODBUS_VERSION is 1.2.3) */
#define LIBMODBUS_VERSION_MICRO 1/* The full version, like 1.2.3 */
#define LIBMODBUS_VERSION 1/* The full version, in string form (suited for string concatenation)*/
#define LIBMODBUS_VERSION_STRING "1.1.1"/* Numerically encoded version, eg. v1.2.3 is 0x010203 */
#define LIBMODBUS_VERSION_HEX ((LIBMODBUS_VERSION_MAJOR << 16) | \(LIBMODBUS_VERSION_MINOR << 8) | \(LIBMODBUS_VERSION_MICRO << 0))/* Evaluates to True if the version is greater than @major, @minor and @micro*/
#define LIBMODBUS_VERSION_CHECK(major,minor,micro) \(LIBMODBUS_VERSION_MAJOR > (major) || \(LIBMODBUS_VERSION_MAJOR == (major) && \LIBMODBUS_VERSION_MINOR > (minor)) || \(LIBMODBUS_VERSION_MAJOR == (major) && \LIBMODBUS_VERSION_MINOR == (minor) && \LIBMODBUS_VERSION_MICRO >= (micro)))#endif /* MODBUS_VERSION_H */
就是给几个宏定义一个值然后是config.h 就是直接在win32 目录下将对应的config.h 导出来。
总体的感觉有一点投机取巧。不过最终还是成功的编译了这个库。测试代码只是简单的调用了一个函数,看一下能不能正常调用到函数。
测试的代码如下:
#include <stdio.h>
#include "../src/modbus.h"
int main(void)
{modbus_t *m_ctx = modbus_new_tcp("127.0.0.1",502);if(m_ctx){printf("mctx is created!\r\n"); }else {printf("m_ctx is null !\r\n");}return 0;
}
关于整个工程,请去gitee 自行下载。更多问题欢迎留言,力所能及范围之内会解答的。
最终的生成文件如下图所示,需要dll 的请到gitee 去下载对应的文件 build 路径下
modbus调试工具开发(1)--windows下编译libmodbus库文件相关推荐
- linux下find查找带有指定权限的文件(windows下编译的源代码文件)
find -type f -perm -o=x 查找用户在windows下编译的源代码文件 转载于:https://blog.51cto.com/axlrose/1357610
- windows下编译skia库
windows下编译skia库 环境需求: 1.安装python2.7.x: python3系列可能又某些库不支持,所以推荐使用python2.7.15(最新). 如何检查是否安装python: 1. ...
- C++ Boost库:windows下编译Boost库
文章目录 1. 需要编译的boost库 2. 编译步骤 3. 库命名规则 4. VS配置库目录 C++ Boost库:简介和第一个示例程序 C++ Boost库:数值转换 lexical_cast C ...
- windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题
之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...
- Windows下编译boost库
需要编译的boost库 以下的库必须单独编译: Boost.Chrono Boost.System Boost.Context Boost.ProgramOptions Boost.Filesyste ...
- Windows下编译openssl库
1.概述 OpenSSL是一个开放源代码的软件库包,它实现了 SSL(Secure SocketLayer)和 TLS(Transport Layer Security)协议,所以应用程序可以使用这个 ...
- windows下编译libzip库
源码 编译libzip需要依赖zlib的库 zlib和libzip的git代码: https://github.com/madler/zlib.git https://github.com/nih-a ...
- windows下编译bootst
在Windows下编译boost库时,参考网上文章:https://blog.csdn.net/zengraoli/article/details/70187556时报错,原来是按照博主文章编译时,在 ...
- 【Jpeg】不同平台如何编译 jpeg-turbo 库文件
本文介绍不同平台下如何编译 jpeg-turbo 库文件. Mac/Linux 平台 Mac/Linux 平台编译 jpeg-turbo 库文件(libturbojpeg)的流程如下: 下载 jpeg ...
- ZYNQ LINUX开发笔记——windows下用xilinx SDK编译zynq linux app小程序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ LINUX开发笔记--windows下用xilinx SDK编译zynq linux app小程序 前言 操作方法 总结 前 ...
最新文章
- Python基础--1.1Python基础介绍
- 前端学习(479):html简介
- 【错误修正】关于文章《小夕说,不了解动态空间增长的程序喵都是假喵》
- js导出的xlsx无法打开_js-xlsx 导出表格至excel
- 魅族“携手”京东,背后有何意图?
- BZOJ.1312.[Neerc2006]Hard Life(分数规划 最大权闭合子图)
- 百面机器学习—10.循环神经网络面试问题总结
- Facebook回应追踪无账号用户:源于网站插件漏洞
- soapUI使用教程----B站 特斯汀学院
- win10自带的打印机服务器,win10系统打印服务器安装设置的详细方法
- Android使用iconfont图标
- 图片还原去遮挡_如何把人像照片上的遮盖物去除看到原来人像?
- 计算机专业英语口语app,强烈推荐4款学英语必备的英语口语APP
- KMP —— 字符串分析算法
- Manifest merger failed : Attribute meta-data#android.support.VERSION@value..
- 用vue去实现百度下拉菜单
- 《DNS与BIND(第5版)》——10.4 增量区域传输(IXFR)
- 美团王兴要向口碑饿了么学啥?
- 绿色 fiddler 免安装 抓包工具
- 清明节踏青PPT模板
热门文章
- 计算机科学导论第五版第二章答案,《计算机科学导论》课后习题答案
- html创建qq注册页面,用javascript制作qq注册动态页面
- 市场主流单片机的介绍和选择指南
- Xceed WPF 3D显示控件Xceed 3D Views for WPF控件详细介绍使用及下载
- Win7电脑蓝屏代码大全
- J2ME开发入门(老java游戏)
- GPS坐标与UTM坐标的转换
- C:\Program Files (x86)\SogouInput\Components\程序异常结束 ,QT
- QT出现“d:\Program Files (x86)\SogouInput\Components\”问题初步想法
- 单片机c语言程序翻译软件,单片机音乐盒翻译小程序MusicEncode软件下载