近期准备开始一个新的项目,主要的内容就是制作一个类似于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库文件相关推荐

  1. linux下find查找带有指定权限的文件(windows下编译的源代码文件)

    find -type f -perm -o=x 查找用户在windows下编译的源代码文件 转载于:https://blog.51cto.com/axlrose/1357610

  2. windows下编译skia库

    windows下编译skia库 环境需求: 1.安装python2.7.x: python3系列可能又某些库不支持,所以推荐使用python2.7.15(最新). 如何检查是否安装python: 1. ...

  3. C++ Boost库:windows下编译Boost库

    文章目录 1. 需要编译的boost库 2. 编译步骤 3. 库命名规则 4. VS配置库目录 C++ Boost库:简介和第一个示例程序 C++ Boost库:数值转换 lexical_cast C ...

  4. windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题

    之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...

  5. Windows下编译boost库

    需要编译的boost库 以下的库必须单独编译: Boost.Chrono Boost.System Boost.Context Boost.ProgramOptions Boost.Filesyste ...

  6. Windows下编译openssl库

    1.概述 OpenSSL是一个开放源代码的软件库包,它实现了 SSL(Secure SocketLayer)和 TLS(Transport Layer Security)协议,所以应用程序可以使用这个 ...

  7. windows下编译libzip库

    源码 编译libzip需要依赖zlib的库 zlib和libzip的git代码: https://github.com/madler/zlib.git https://github.com/nih-a ...

  8. windows下编译bootst

    在Windows下编译boost库时,参考网上文章:https://blog.csdn.net/zengraoli/article/details/70187556时报错,原来是按照博主文章编译时,在 ...

  9. 【Jpeg】不同平台如何编译 jpeg-turbo 库文件

    本文介绍不同平台下如何编译 jpeg-turbo 库文件. Mac/Linux 平台 Mac/Linux 平台编译 jpeg-turbo 库文件(libturbojpeg)的流程如下: 下载 jpeg ...

  10. ZYNQ LINUX开发笔记——windows下用xilinx SDK编译zynq linux app小程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ LINUX开发笔记--windows下用xilinx SDK编译zynq linux app小程序 前言 操作方法 总结 前 ...

最新文章

  1. Python基础--1.1Python基础介绍
  2. 前端学习(479):html简介
  3. 【错误修正】关于文章《小夕说,不了解动态空间增长的程序喵都是假喵》
  4. js导出的xlsx无法打开_js-xlsx 导出表格至excel
  5. 魅族“携手”京东,背后有何意图?
  6. BZOJ.1312.[Neerc2006]Hard Life(分数规划 最大权闭合子图)
  7. 百面机器学习—10.循环神经网络面试问题总结
  8. Facebook回应追踪无账号用户:源于网站插件漏洞
  9. soapUI使用教程----B站 特斯汀学院
  10. win10自带的打印机服务器,win10系统打印服务器安装设置的详细方法
  11. Android使用iconfont图标
  12. 图片还原去遮挡_如何把人像照片上的遮盖物去除看到原来人像?
  13. 计算机专业英语口语app,强烈推荐4款学英语必备的英语口语APP
  14. KMP —— 字符串分析算法
  15. Manifest merger failed : Attribute meta-data#android.support.VERSION@value..
  16. 用vue去实现百度下拉菜单
  17. 《DNS与BIND(第5版)》——10.4 增量区域传输(IXFR)
  18. 美团王兴要向口碑饿了么学啥?
  19. 绿色 fiddler 免安装 抓包工具
  20. 清明节踏青PPT模板

热门文章

  1. 计算机科学导论第五版第二章答案,《计算机科学导论》课后习题答案
  2. html创建qq注册页面,用javascript制作qq注册动态页面
  3. 市场主流单片机的介绍和选择指南
  4. Xceed WPF 3D显示控件Xceed 3D Views for WPF控件详细介绍使用及下载
  5. Win7电脑蓝屏代码大全
  6. J2ME开发入门(老java游戏)
  7. GPS坐标与UTM坐标的转换
  8. C:\Program Files (x86)\SogouInput\Components\程序异常结束 ,QT
  9. QT出现“d:\Program Files (x86)\SogouInput\Components\”问题初步想法
  10. 单片机c语言程序翻译软件,单片机音乐盒翻译小程序MusicEncode软件下载