1 前言
前两天在win上编译了ffmpeg,引入了外部库libx264/libfdk-aac,今日测试https协议时发现不奏效,所以需要引入openssl库,然后重新编译ffmpeg。
在win上编译openssl库遇到不少问题,折腾老半天才编译通过,因而此处记录下。
本文所使用的openssl版本是 1.1.1i. 编译环境:win11 + vs2019 + msys2.
2 准备工作
- 下载perl并安装,到官网下载 Download & Install Perl - ActiveStateDownload Perl 5.32 and 5.28 from ActiveState & get precompiled Perl distribution. ActiveState Perl is free to download.https://www.activestate.com/products/perl/
- 下载nasm并安装,https://www.nasm.us/https://www.nasm.us/
- openssl源码下载,/source/old/1.0.2/index.htmlhttps://www.openssl.org/source/old/1.0.2/
- 配置环境变量,在系统环境变量PATH下,增加如下两项:
3 编译openssl
以管理员身份打开x64 Native Tools Command Prompt for VS 2019,如果编译x86下的openssl库,请打开x86 Native Tools Command Prompt for VS 2019,并进入到openssl的代码根目录:
执行命令 perl Configure VC-WIN64A --prefix=install_path --openssldir=yyy,配置成功后,再执行nmake编译,出现以下编译错误:
改执行如下命令 perl Configure VC-WIN64A no-asm --prefix=xxx --openssldir=yyy ,再执行nmake命令,可成功编译完成。
这里是完整的配置、编译、测试和安装命令:
# 配置openssl
perl Configure VC-WIN64A no-asm --prefix=xxx --openssldir=yyy
#编译openssl
nmake
nmake test
#只安装openssl的bin/include/lib文件
nmake install_sw
#除了bin/include/lib文件以外,还会安装40M左右的html文档
#nmake install
然后在以下命令行窗口执行命令:openssl version,可以看到openssl安装成功:
值得一提的是,如果不用--prefix指定安装目录,缺省会安装在以下目录:
CPU架构 | 缺省安装路径 |
x64 | C:\Program Files\OpenSSL |
x86 | C:\Program Files (x86)\OpenSSL |
4 配置ffmpeg
在编译完成openssl库之后,并配置完成pkgconfig,接下来就是引入到ffmpeg库了,即通过--enable openssl 配置ffmpeg。
这里记录配置ffmpeg时踩过的坑。
注意:
1)用msys2工具编译安装ffmpeg前,需自己组织openssl的依赖目录,并在pkgconfig目录下组织openssl.pc文件,请参考 win上编译ffmpeg 此处大致如下:
62646@xxx MSYS /usr/local/openssl
# pwd
/usr/local/openssl
62646@xxx MSYS /usr/local/openssl
# tree -L 2
.
├── bin
│ ├── c_rehash.pl
│ ├── libcrypto-1_1-x64.dll
│ ├── libcrypto-1_1-x64.pdb
│ ├── libssl-1_1-x64.dll
│ ├── libssl-1_1-x64.pdb
│ ├── openssl.exe
│ └── openssl.pdb
├── include
│ ├── crypto
│ ├── internal
│ └── openssl
└── lib
├── crypto.lib
├── engines-1_1
├── pkgconfig
└── ssl.lib
openssl的pkgconfig目录下新建openssl.pc文件,并copy如下内容:
prefix=/usr/local/openssl
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: OpenSSL
Description: Secure Sockets Layer and cryptography libraries and tools
Version: 1.1.1i
Requires: libssl libcrypto
并在~/.bashrc文件下,增加如下内容:
export PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig:$PKG_CONFIG_PATH
在终端执行 source ~/.bashrc 生效。
2) 更改openssl库lib目录下的lib库,去掉lib库名前的lib关键字,具体如下:
以上2点特别注意,不然加上--enable-openssl配置ffmpeg时,配置ffmpeg时会报错:openssl not found
这里是遇到的配置错误:
配置成功,External libraries:此处(也即绿色部分)会增加openssl一项:
以上就是win上编译openssl库基本步骤,及其避坑之法。