Mingw编译OPC(Open62541)

本文详细描述了如何在Windows7环境下,使用MinGW7.3、CMake3.26.3和Python3.7.7编译OPCUA库Open62541v1.3.7,包括配置步骤和解决常见问题如make.exe路径问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

网上有很多采用MSVC编译的博文,因为我这边不止一个平台会用到,所以编译工具选用了MinGW。

编译前准备如下:

Open62541版本:v1.3.7(官网可以下载已经编译完成的包,我这边选择自己根据需要编译)

下载链接:GitHub - open62541/open62541 at pack/v1.3.7Open source implementation of OPC UA (OPC Unified Architecture) aka IEC 62541 licensed under Mozilla Public License v2.0 - GitHub - open62541/open62541 at pack/v1.3.7icon-default.png?t=N7T8https://github.com/open62541/open62541/tree/pack/v1.3.7

系统:win7

MinGW版本:7.3 (64位)

Cmake版本:3.26.3

Python版本:3.7.7(本来想安装最新版本,但python后面的版本好像不支持Win7了,所以往前选装了3.7这个版本)

2.编译步骤

2.1.在拉下来的源码或解压生成的源码目录中创建build目录:

2.2.Configure选项

Configure选择MinGW,可能会报错:找不到make,如下图所示

这是因为系统找不到make.exe的路径。

2.2.1.配置make.exe的路径

将你的make.exe所在的路径配置进去,我这边是:

接着点击configure。

如果你的系统中没有安装python或者python版本小于3,则会让你先安装python3,按照提示安装即可。

configure可能需要几分钟。

如上图所示完成后,接着往下走。

2.3.Generate选项

此时可选择UA选项:

我这边勾选了UA_ENABLE_AMALGAMATION,其余默认:

点击Generate,生成时间根据UA选项而定.

生成完毕,接着往下走。

2.4.Make编译

此时build文件夹中已经生成了项目的makefile文件,有兴趣的可自行查看:

使用cmd工具,输入make命令,即开始编译:

编译完成后,build目录中会生成open62541.h和open62541.c两个文件,我们可能会在项目中使用到。

本文到此结束。

### 关于 MinGW-w64 和 POSIX 配置或兼容性问题 MinGW-w64 是一个用于 Windows 平台的 GCC 编译器实现,支持生成针对不同架构的目标文件。当涉及到 POSIX 兼容性和配置时,通常会遇到一些特定的问题。 #### 报错 `unrecognized command line option '-m64'` 的原因 如果在使用 MinGW-w64 进行编译时遇到了错误提示 `unrecognized command line option '-m64'`,这通常是由于所使用的工具链不支持 `-m64` 参数引起的[^1]。此参数主要用于指定目标平台为 64 位模式,而某些版本的 MinGW 工具可能未完全适配该选项。 解决方案可以尝试切换到更完整的 MinGW-w64 版本或者调整构建脚本来移除不必要的命令行标志。 #### 使用 MinGW32 构建环境执行命令序列 为了设置适合交叉编译至 Win32 或其他相关系统的开发环境,可以通过如下方式完成必要的准备工作: ```bash PATH=/path/to/mingw32-compiler/bin:$PATH chmod a-w win32.cache # Prevent configure script from modifying cache file. ./configure --cache-file=win32.cache --host=mingw32 ``` 上述指令展示了如何通过自定义路径以及防止缓存被更改来初始化配置过程[^2]。对于涉及多体系结构的支持情况,则需进一步细化传递给 `--with-*` 类型选项的具体内容[^4]。 #### open62541OPC UA 协议栈的应用场景 提到 Open62541 实现了 OPC UA 二进制协议堆栈及其客户端/服务器 SDK 支持[^3],虽然这里并未直接提及与 MinGW-w64 的关联度,但在实际项目中可能会考虑利用此类库配合 MinGW 开发跨平台工业通信应用。此时应特别注意两者间 API 定义差异及线程模型匹配等问题。 --- ### 示例代码片段展示简单的 CMakeLists.txt 设置以适应多种操作系统需求 以下是基于 CMake 的一段示例代码,它可以帮助开发者更好地管理依赖关系并处理不同的编译器特性: ```cmake if(MINGW) add_definitions(-DWIN32_LEAN_AND_MEAN -DNOMINMAX) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") add_executable(example example.c) target_include_directories(example PRIVATE ${PROJECT_SOURCE_DIR}/include/) ``` 以上例子简单说明了怎样检测当前是否处于 MinGW 下运行状态,并据此添加额外宏定义;同时也强调保持良好编程习惯的重要性——即始终开启警告级别较高的编译开关以便尽早发现问题所在。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值