代码改变世界

二次开发的openssl在windows高效的平台的编译

2026-01-15 14:10  tlnshuju  阅读(1)  评论(0)    收藏  举报

二次开发的openssl在windows平台的编译

兼容的,理论上应该正常编译通过无报错。就是原生openssl源码在windows平台应该

本次编译是未知人员在openssl1.1.1m版本基础上开发的支持tlcp协议的openssl,可能只拥护linux平台,在windows平台编译遇到众多错误,主要为找不到dlopen系列函数。

使用visual studio2026编译出现出现问题,运用AI追问windows平台使用dlopen函数问题,无意中发现mingw64更合适,这些环境献出了 POSIX 兼容层,包括 unistd.h,于是改用msys2/mingw64编译。下面是下载安装安装工具的详细过程:

## MSYS2/MinGW 编译环境搭建完整指南

### 1. 下载和安装 MSYS2

**下载地址:**
- 官网:https://www.msys2.org/
- 直接下载:https://github.com/msys2/msys2-installer/releases

**安装步骤:**
```bash
# 1. 下载 msys2-x86_64-xxxxxxxx.exe
# 2. 以管理员身份运行安装程序
# 3. 安装到默认路径(推荐):C:\msys64
# 4. 安装完成后取消勾选"立即运行"
```

### 2. 初始化和更新系统

**首次启动:**
```bash
# 启动 MSYS2 MSYS 终端(不是 MinGW 终端)
# 更新包数据库和核心包
pacman -Syu

# 体系会要求重启终端,关闭后重新打开
# 再次更新剩余的包
pacman -Su
```

### 3. 安装开发工具链

**基础编写环境:**
```bash
# 安装基础开发工具
pacman -S base-devel

# 安装 MinGW-w64 工具链(64位)
pacman -S mingw-w64-x86_64-toolchain

# 安装 32位工具链(可选)
pacman -S mingw-w64-i686-toolchain
```

**验证安装:**
```bash
# 启动 MSYS2 MinGW 64-bit 终端
gcc --version
g++ --version
make --version
```

### 4. 安装常用构建库

**基础库:**
```bash
# 安装常用制作库
pacman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-ninja
pacman -S mingw-w64-x86_64-pkg-config
pacman -S mingw-w64-x86_64-dlfcn
pacman -S mingw-w64-x86_64-openssl
```

**Git 和其他工具:**
```bash
pacman -S git
pacman -S vim
pacman -S wget
pacman -S unzip
```

### 5. 环境配置

**环境变量设置:**
```bash
# 在 Windows 系统环境变量中添加:
# Path 变量添加:
C:\msys64\mingw64\bin
C:\msys64\usr\bin

# 创建 MSYS2_PATH_TYPE 环境变量(可选)
MSYS2_PATH_TYPE=inherit
```

**Shell 配置:**
```bash
# 编辑 ~/.bashrc
vim ~/.bashrc

# 添加常用别名
alias ll='ls -la'
alias la='ls -A'
alias l='ls -CF'

# 设置编译环境
export CC=gcc
export CXX=g++
export MAKEFLAGS="-j$(nproc)"
```

### 6. 三种终端的区别

| 终端类型 | 用途 | PATH 环境 | 编译目标 |
|----------|------|-----------|----------|
| **MSYS2 MSYS** | 系统管理、包安装 | `/usr/bin` | POSIX 应用 |
| **MSYS2 MinGW 64-bit** | 64位 Windows 应用构建 | `/mingw64/bin` | Windows x64 |
| **MSYS2 MinGW 32-bit** | 32位 Windows 应用制作 | `/mingw32/bin` | Windows x86 |

### 7. 测试环境

**编写测试程序:**
```c
// test.c
#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>

int main() {
printf("Hello MSYS2/MinGW!\n");
printf("Process ID: %d\n", getpid());

// 测试动态链接
void* handle = dlopen(NULL, RTLD_LAZY);
if (handle) {
printf("dlopen test passed!\n");
dlclose(handle);
}

return 0;
}
```

**编译测试:**
```bash
# 在 MinGW 64-bit 终端中
gcc -o test test.c -ldl
./test.exe
```

### 8. OpenSSL 编译示例

```bash
# 下载 OpenSSL 源码
wget https://www.openssl.org/source/openssl-3.1.4.tar.gz
tar -xzf openssl-3.1.4.tar.gz
cd openssl-3.1.4

# 配置编译(MinGW 64位)
./Configure mingw64 --prefix=/mingw64 --openssldir=/mingw64/ssl

# 编译安装
make -j$(nproc)
make install
```

### 9. 常用包管理命令

```bash
# 搜索包
pacman -Ss package_name

# 安装包
pacman -S package_name

# 删除包
pacman -R package_name

# 更新架构
pacman -Syu

# 查看已安装包
pacman -Q

# 查看包信息
pacman -Si package_name
```

### 10. 常见问题解决

**问题1:找不到头文件**
```bash
# 确保使用正确的终端(MinGW 而不是 MSYS)
# 检查包是否安装正确
pacman -Qs mingw-w64-x86_64-headers
```

**难题2:编译的程序无法在其他 Windows 机器运行**
```bash
# 静态链接
gcc -static -o program program.c

# 或复制必要的 DLL 文档
ldd program.exe # 查看依赖
```

**障碍3:路径问题**
```bash
# 使用 MSYS2 路径转换
cygpath -w /mingw64/bin # 转为 Windows 路径
cygpath -u "C:\msys64\mingw64\bin" # 转为 Unix 路径
```

搭建达成后,你就有了一个功能完整的类 Unix 编译环境,支持编译 Windows 原生应用程序!

应用msys2安装工具包,继而利用mingw64编译openssl,编译参数为:

./config --prefix=/usr/local/openssl enable-sm2 enable-sm3 enable-sm4 enable-tlcp no-asm

windows平台不支持的Linux函数,一一结合AI给出的代码在源码中添加了对应的windows实现。最终编译时未出现dlopen问题,链接时却提示找不到dlopen系列函数。就是遇到众多找不到的函数,核心

编译参数给的不对导致没有找到-ldl库。就是分析:编译没有问题,说明编译环境有头文件,平台应该有对应的库文档,编译有问题说明没有库文件,应该

测试验证:使用dlopen写测试函数,并编译:

gcc dlopen-test.c -o dlopen // 未定义dlopen函数

gcc -ldl dlopen-test.c -o dlopen //未定义dlopen函数

gcc dlopen-test.c -o dlopen -ldl //编译成功

windows平台可能对动态库的加载顺序有要求,查看openssl的makefile文件,找到了可以通过变量EX_LIBS在编译命令最后追究指定库:

EX_LIBS = -ldl

至此,编译链接通过。