1.Windows下编译OpenSSL3.1.1
2.å¦ä½å¨ Windows ä¸ç¼è¯ OpenSSL
3.编译OpenSSL
4.Windows10下编译64位openssl
5.FFmpeg开发笔记(十六)Linux交叉编译Android的源译OpenSSL库
Windows下编译OpenSSL3.1.1
OpenSSL是一个强大的安全套接字层密码库,广泛用于加密HTTPS和SSH。码编它远不止是源译一个库,还是码编一个多用途、跨平台的源译密码工具。
编译环境和依赖工具
为了方便编译OpenSSL,码编源码 陷阱需要安装Strawberry Perl和NASM。源译Strawberry Perl的码编下载地址是Strawberry Perl for Windows,而NASM是源译汇编器,其下载地址为NASM。码编安装Strawberry Perl后,源译会自动添加到环境变量中,码编但NASM不会自动添加。源译确保在环境变量Path中添加NASM.exe所在的码编目录,避免编译时出现错误。源译微分销 源码
编译步骤
从GitHub下载OpenSSL源码,具体地址为GitHub - openssl/openssl: TLS/SSL and crypto library。进入源码所在目录后,执行编译命令。编译过程大约需要分钟。注意,使用--prefix选项指定安装路径时,必须是绝对路径。若未指定或使用非管理员权限执行,可能会出现Permission Denied错误。
可能遇到的问题
1、在编译过程中,可能会遇到“Could Not Find D:\SourceCode\openssl-3.1.1\libcrypto-3-x.*”的错误。解决此问题的js游戏源码方法是在Shell中通过命令:path d:\nasm\path;%PATH%配置NASM环境变量,这通常可以解决该错误。
2、在安装过程中,可能出现“Cannot create directory C:/Program Files/Common Files/SSL: Permission denied”的错误。解决方法是使用管理员身份运行Shell,因为OpenSSL在安装时会创建C:\Program Files\Common Files中的SSL目录。
总结
OpenSSL的编译相对简单,但确保正确配置环境和路径。如遇问题,可以在评论中提问,或关注同名GZH并回复openssl以获取下载链接。
å¦ä½å¨ Windows ä¸ç¼è¯ OpenSSL
å¦ä½å¨Windowsä¸ç¼è¯OpenSSL ï¼VS使ç¨VCçclç¼è¯å¨ï¼
1ãå®è£ ActivePerl//åå§åçæ¶å,éè¦ç¨å°perl解éå¨
2ã使ç¨VSä¸çVisual Studio Command Promptè¿å ¥æ§å¶å°æ¨¡å¼ï¼è¿ä¸ªæ¨¡å¼ä¼èªå¨è®¾ç½®åç§ç¯å¢åéï¼
3ã解å缩opensslçå ,è¿å ¥opensslçç®å½
4ãperl configure VC-WIN
å°½éå¨è¿ä¸ªç®å½ä¸æ§è¡è¯¥å½ä»¤ï¼å¦åæ¾ä¸å°Configureæ件ï¼æè æå®å®æ´çConfigureæ件路å¾ã
5ãms\do_ms.bat
å¨è§£åç®å½ä¸æ§è¡ms\do_ms.batå½ä»¤
6ãnmake -f ms\ntdll.mak
7ãnmake -f ms\nt.mak
ç¼è¯å
å¨openssl解åç®å½ä¸æ§è¡ï¼å®æç¼è¯åãè¾åºçæ件å¨outdll (6), out (7)éé¢ï¼å æ¬åºç¨ç¨åºçå¯æ§è¡æ件ãlibæ件ådllæ件
注æï¼å¨è¿è¡ç¬¬äºæ¥æ¶ï¼clç¼è¯å¨ä¼æ±æ¨è¯´.\crypto\des\enc_read.cæ件çreadæ¯The POSIX name for this item is deprecatedï¼ä¸è¢«æ¨èçï¼ï¼å»ºè®®ä½¿ç¨_readãåµåµï¼æå¯ä¸æ³å°OpenSSLä¸çææçreadå½æ°ä¿®æ¹ä¸º_readãåçclçé误代ç error Cï¼äºæ¯ä¸MSDNä¸æ¥æ¾ï¼
warning treated as error - no object file generated
/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.
æ¯ç±äºè®¾ç½®äº/WXé项ï¼å°ææçè¦åé½ä½ä¸ºéè¯¯å¯¹å¾ ï¼æ以ããã
äºæ¯æå¼OpenSSLç®å½ä¸çMSç®å½ä¸çntdll.makæ件ï¼å°CFLAGç/WXé项å»æï¼åçããã
继ç»æ§è¡nmake -f ms\ntdll.mak
=================================
ä¸ãç¼è¯å¹¶å®è£ OpenSSL
1ãæç §æ åæ¥éª¤ä»æºä»£ç ç¼è¯å®è£ OpenSSL
å¨ç¼è¯OpenSSLåï¼éè¦æ£ç¡®å®è£ Perlï¼å 为å¨ç¼è¯OpenSSLæ¶éè¦ä½¿ç¨å°è¯¥ç¨åºã
ä¸è½½ææ°çæ¬çPerlç¶åå®è£ ä¹ã
ä¸è½½ææ°çæ¬çOpenSSL
ç¶åå°æºç 解å缩å°æ个ç®å½ï¼å¦ C:\openssl-0.9.8jï¼ä¸ã
è¿å ¥opensslæºç ç®å½ã
cd c:\openssl-1.0.1e
以ä¸ä¸ºåç §è¯¥ç®å½ä¸çæ件INSTALL.Wçæ§è¡è¿ç¨ï¼
è¿è¡configureï¼
perl Configure VC-WIN
å建Makefileæ件ï¼
ms\do_ms.bat
ç¼è¯å¨æåºï¼
nmake -f ms\ntdll.mak
ç¼è¯éæåºï¼
nmake -f ms\nt.mak
æµè¯å¨æåºï¼
nmake -f ms\ntdll.mak test
æµè¯éæåºï¼
nmake -f ms\nt.mak test
å®è£ å¨æåºï¼
nmake -f ms\ntdll.mak install
å®è£ éæåºï¼
nmake -f ms\nt.mak install
æ¸ é¤ä¸æ¬¡å¨æåºçç¼è¯ï¼ä»¥ä¾¿éæ°ç¼è¯ï¼
nmake -f ms\ntdll.mak clean
æ¸ é¤ä¸æ¬¡éæåºçç¼è¯ï¼ä»¥ä¾¿éæ°ç¼è¯ï¼
nmake -f ms\nt.mak clean
2ãå¦æå«éº»ç¦ï¼ä¸æ³ç¼è¯ï¼å¯ä»¥ç´æ¥ç¨å«äººå好çwindows OpenSSL å®è£ å ï¼æç¨çæ¯0.9.8jçï¼ï¼
å¯ä»¥ä¸è½½ OpenSSL for Windowsï¼ç´æ¥å®è£ ã
P.S. OpenSSL for Windows çæºä»£ç æä¸äºæ°æ®ç±»ååVC6çç¼è¯å¨ä¸å ¼å®¹ï¼æåç°çä¸å ¼å®¹çæ°æ®ç±»åå¦ä¸ï¼
å¨OpenSSLå®è£ ç®å½çä¸çinclude/bn.hæ件ä¸ï¼å°
#define BN_ULLONG unsigned long long
#define BN_ULONG unsigned long long
#define BN_LONG long long
åå«ä¿®æ¹ä¸ºï¼
#define BN_ULLONG ULONGLONG
#define BN_ULONG ULONGLONG
#define BN_LONG LONGLONG
å¦åï¼ä¼åºç°ç¼è¯é误ã
äºã使ç¨OpenSSL
å¨VCä¸é 置使ç¨ä»¥ä¸çå½æ°åºï¼
ç¹å»èåï¼Tools -> Optionsï¼å¼¹åºå¯¹è¯æ¡"Options"ï¼å¨è¯¥å¯¹è¯æ¡ä¸éæ©"Directories"æ ç¾ã
å¨"Show directories for:"ç"Include files"é项ä¸æ°å¢ç®å½"C:\openssl\include"ï¼
"Library files"éæ©ä¸æ°å¢ç®å½"C:\openssl\lib"ã
ç¶åå¨éè¦é¾æ¥OpenSSLå½æ°åºçå·¥ç¨ä¸å å ¥å¦ä¸ä¸¤å¥ï¼
#pragma comment(lib, "ssleay.lib")
#pragma comment(lib, "libeay.lib")
å ¶ä½ç¨æ¯å°OpenSSLæéçåºå¯¼å ¥å·¥ç¨ä¸ã
ä¸ãé®é¢
æå¨é¾æ¥OpenSSLçéæå½æ°åºæ¶éå°ç±»ä¼¼ä»¥ä¸çé®é¢ï¼
Linking...
msvcrt.lib(MSVCRT.dll) : error LNK: _strchr already defined in libcmtd.lib(strchr.obj)
...
è¿æ¯ç±äºOpenSSLçéæå½æ°åºä½¿ç¨çæ¯äºVCçå¤çº¿ç¨DLLçReleaseçæ¬ï¼èæçç¨åºä½¿ç¨äºå¤çº¿ç¨éæé¾æ¥çReleaseçæ¬ã
è°æ´OpenSSLçéæå½æ°åºä½¿ç¨çåºå½æ°çæ¬å³å¯ï¼è°æ´è¿ç¨å¦ä¸ï¼
ç¼è¾æ件 ms\nt.makï¼å°è¯¥æ件第è¡
"CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN -DWIN_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN -D_CRT_SECURE_NO_DEPRECATE -
D_CRT_NONSTDC_NO_DEPRECATE /Fdout -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5 -
DOPENSSL_NO_DYNAMIC_ENGINE"
ä¸ç"/MD"ä¿®æ¹ä¸º"/MT"ãç¶åéæ°ç¼è¯å®è£ OpenSSLå³å¯ã
åãéå½ï¼å¨VCä¸å¯¹C/C++ è¿è¡æ¶åºä¸åçæ¬ç¼è¯æ令说æ
ãå¨VCä¸å¯¹C/C++ è¿è¡æ¶åºä¸åçæ¬ç¼è¯æ令说æãä¸æä¸è¯¦ç»ä»ç»äºè¿æ¥ä¸åçæ¬åºçç¼è¯æ令å¦ä¸ï¼
C Runtime Libraryï¼
/MD MSVCRT.LIB å¤çº¿ç¨DLLçReleaseçæ¬
/MDd MSVCRTD.LIB å¤çº¿ç¨DLLçDebugçæ¬
/MT LIBCMT.LIB å¤çº¿ç¨éæé¾æ¥çReleaseçæ¬
/MTd LIBCMTD.LIB å¤çº¿ç¨éæé¾æ¥çDebugçæ¬
/clr MSVCMRT.LIB æ管代ç åéæ管代ç æ··å
/clr:pure MSVCURT.LIB 纯æ管代ç
C++ Standard Libraryï¼
/MD MSVCPRT.LIB å¤çº¿ç¨DLLçReleaseçæ¬
/MDd MSVCPRTD.LIB å¤çº¿ç¨DLLçDebugçæ¬
/MT LIBCPMT.LIB å¤çº¿ç¨éæé¾æ¥çReleaseçæ¬
/MTd LIBCPMTD.LIB å¤çº¿ç¨éæé¾æ¥çDebugçæ¬
===============================================
ä¸ é ç½®ç¼è¯åæ°
é ç½®ç¼è¯åæ°æ¯è¿è¡OpenSSLç¼è¯ç第ä¸æ¥,è¿ä¸æ¥å¯ä»¥ç¡®å®ç³»ç»çç¯å¢,使ç¨ä»ä¹ç¼è¯å¨,é»è®¤å®è£ è·¯å¾ä»¥åå ¶ä»ä¸äºé项.æ¥éª¤å¦ä¸:
1.å®è£ perl:ä¸è½½ActivePerl-5.8.8.-MSWin-x-.msi,ç¶åç¹å»msiæ件è¿è¡å®è£ !
2..é ç½®ç¼è¯åæ°:ä¸è½½openssl-1.0.1e.tar.gz,解å.
vc:é¦å å¨C:\Program Files\Microsoft Visual Studio .NET \VC\bin\ç®å½ä¸æ§è¡vcvars.bat,ç¶åå¨è§£ååçopenssl-1.0.1eç®å½,æ§è¡å½ä»¤é ç½®ç¼è¯åæ°:perl Configure VC-WIN
bc:å¨è§£ååçopenssl-0.9.8gç®å½ä¸æ§è¡:perl Configure BC-
äº çææ¹å¤çæ件
å¨ä½¿ç¨configureèæ¬é 置好çç¼è¯åæ°å,å°±å¯ä»¥ä½¿ç¨æ¹å¤çå½ä»¤æ¥çæç¼è¯èæ¬.çæç¼è¯èæ¬æ ¹æ®éç¨ç¼è¯å¨çä¸åé常使ç¨ä¸åçæ¹å¤çæ件.å°±ç®åæ¥è¯´,使ç¨vcç¼è¯çæ¶åæä¸ç§éæ©:do_ms,do_masmådo_nasmæ¥å建ä¸ç³»åç¼è¯èæ¬æ件,å³.makèæ¬.æ¥éª¤å¦ä¸:
vc:å¨openssl-1.0.1eç®å½ä¸,æ§è¡å½ä»¤æ¥æ¹å¤çæ件:do_ms,do_masmådo_nasm
bc:1.ä¸è½½nsm.zip微软æ±ç¼ç¼è¯å¨,解å,æ·è´å°c:/windowsç®å½ä¸,ä¿®æ¹å称为nasmw.exe;2.å¨openssl-1.0.1eç®å½ä¸,æ§è¡å½ä»¤æ¥æ¹å¤çæ件:ms\do_nasm
ä¸ ä»£ç ç¼è¯
vc:
å®æä¸é¢æ¥éª¤å,å¯ä»¥çå°ä¸¤ä¸ªå ³é®èæ¬æ件:nt.makåntdll.mak.å¦ææ们éè¦ç¼è¯åçOpenSSLåºæ¯æ¯æå¨æDLLå½¢å¼ç,é£ä¹åºè¯¥ä½¿ç¨ntddll.makæ件è¿è¡ç¼è¯,è¿æ ·ç¼è¯å®ææ们ä¼å¾å°å个ä¸OpenSSLçAPIåºæå ³æ件:ssleay.lib,libeay.lib,ssleay.dllålibeay.dll.æ§è¡çç¼è¯å½ä»¤å½¢å¼å¦ä¸:nmake -f ms\ntdll.mak
å¦æä¸å¸æ以å¨æåºçå½¢å¼ä½¿ç¨OpenSSL,é£ä¹å¯ä»¥ä½¿ç¨nt.makæ件è¿è¡ç¼è¯.è¿æ ·ç¼è¯å使ç¨OpenSSLçæ¶å,åç´æ¥å°ä»£ç é¾æ¥è¿æ们çç¨åºéé¢.æ§è¡å½ä»¤å¦ä¸:nmake -f ms\nt.mak
bc:æ§è¡å½ä»¤æ¥å®æ代ç ç¼è¯:make -f ms\bcb.mak
å ELSE
1)
æµè¯å¨æåºï¼
nmake -f ms\ntdll.mak test
æµè¯éæåºï¼
nmake -f ms\nt.mak test
å®è£ å¨æåºï¼
nmake -f ms\ntdll.mak install
å®è£ éæåºï¼
nmake -f ms\nt.mak install
æ¸ é¤ä¸æ¬¡å¨æåºçç¼è¯ï¼ä»¥ä¾¿éæ°ç¼è¯ï¼
nmake -f ms\ntdll.mak clean
æ¸ é¤ä¸æ¬¡éæåºçç¼è¯ï¼ä»¥ä¾¿éæ°ç¼è¯ï¼
nmake -f ms\nt.mak clean
2)
使ç¨OpenSSL
å¨VCä¸é 置使ç¨ä»¥ä¸çå½æ°åºï¼
ç¹å»èåï¼Tools -> Optionsï¼å¼¹åºå¯¹è¯æ¡"Options"ï¼å¨è¯¥å¯¹è¯æ¡ä¸éæ©"Directories"æ ç¾ã
å¨"Show directories for:"ç"Include files"é项ä¸æ°å¢ç®å½"C:\openssl\include"ï¼"Library files"éæ©ä¸æ°å¢ç®å½"C:\openssl\lib"ã
ç¶åå¨éè¦é¾æ¥OpenSSLå½æ°åºçå·¥ç¨ä¸ç¼è¯æ¶å å ¥"libeay.lib"å°±å¯ä»¥äºã
编译OpenSSL
要编译OpenSSL,首先确保你的环境准备如下:1. 准备工作: 下载并安装必要的工具,包括openssl(github.com/openssl/openssl)和Perl(perl.org/get.html)。刷人气源码注意,先安装NASM,因为后续的Perl安装会自动添加环境变量,避免安装顺序错误导致的问题。
2. 编译过程: 选择位的版本,以管理员权限运行VS 的x Native Tools Command Prompt。在源代码目录下,开始编译过程,使用前缀指定绝对路径。 在编译过程中,你可能会遇到以下报错:报错1:如果你遇到“Locale... unsupported”和“Configure”文件找不到的问题,需要设置环境变量LC_ALL为“C”,LANG为“zh_CN.GBK”。
报错2:“perl”命令不可用。app软件源码确保已安装Perl并将其路径添加到环境变量中。
报错3:“nmake”命令未找到。由于nmake是Visual Studio的一部分,你需要安装VS,并在环境变量的“Path”中添加nmake.exe的位置,如C:\Program Files (x)\...\VC\Tools\MSVC\...\bin\Hostx\x。
完成上述步骤后,你将获得编译成功的OpenSSL。 3. 版本选择: 如果你想要编译特定版本,例如1.0.2u的x release或debug版本,只需针对相应命令进行操作。参考资料:
Windows下编译位openssl
为了在Windows 系统下编译位的openssl,我们首先需要准备一些工具。确保安装了Microsoft Visual Studio,这是进行编译工作所需的重要环境之一。接下来,通过搜索vcvarsall.bat文件并进入其所在目录,准备启动编译过程。
接下来,在打开的命令提示符中执行vcvarsall.bat x_amd 命令,这一步是为编译器设置正确的环境变量。然后,使用解压后的openssl源码文件所在的目录下的命令行,执行perl Configure VC-WINA --prefix=D:\openssl\install。这里的--prefix参数用于指定编译后的openssl库的安装路径。
继续执行ms\do_wina命令,随后,通过输入nmake -f ms\nt.mak启动编译工作,这可能需要几分钟时间。紧接着,执行nmake -f ms\nt.mak install命令,完成编译和安装步骤。
当编译过程完成后,打开D:\openssl\install文件夹,可以发现刚编译出的openssl库文件。整个编译过程比较繁琐,有许多教程在细节上描述不够清晰,因此特意记录下这一过程,希望对其他开发者有所帮助。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
《FFmpeg开发实战:从零基础到短视频上线》一书中,示例程序主要针对本地音视频文件进行测试。鉴于安全性考虑,众多网络视频都采用了/openssl/open...,各版本openssl的下载页面是github.com/openssl/open...。以年月发布的openssl-3.2.0为例,可以从以下链接下载该版本的openssl源码包:
github.com/openssl/open...
将openssl的源码包上传到Linux服务器,解压并进入源码目录,执行以下命令:
tar zxvf openssl-3.2.0.tar.gz cd openssl-3.2.0
确认ndk已放置在服务器上,创建编译脚本build_openssl.sh,填入以下脚本内容(注意android-arm表示编译位的so库,no-shared表示只编译静态库不编译动态库):
#!/bin/bash NDK_HOME=/usr/local/src/android-ndk-re SYSTEM=linux-x_ HOST=aarch-linux-android API= export PATH=$NDK_HOME/toolchains/llvm/prebuilt/$SYSTEM/bin:$NDK_HOME/toolchains/$HOST-4.9/prebuilt/$SYSTEM/bin:$PATH export ANDROID_NDK_ROOT=$NDK_HOME echo "config for openssl" ./Configure android-arm no-shared --prefix=/usr/local/app_openssl -D__ANDROID_API__=$API echo "config for openssl completed" make -j4 make install
保存并退出build_openssl.sh,执行以下命令编译和安装openssl:
chmod +x build_openssl.sh ./build_openssl.sh
2、加载openssl的环境变量
第一步将openssl安装在/usr/local/app_openssl,并将openssl的pkgconfig路径加载到环境变量PKG_CONFIG_PATH中。Linux系统的profile文件位于用户初始目录的.bash_profile。执行以下命令编辑当前用户的profile文件:
cd vi .bash_profile
往.bash_profile文件末尾添加以下一行:
export PKG_CONFIG_PATH=/usr/local/app_openssl/lib/pkgconfig:$PKG_CONFIG_PATH
保存并退出.bash_profile后,执行以下命令加载环境变量:
source .bash_profile
然后执行以下环境变量查看命令,确保openssl的环境变量已经成功加载:
env | grep PKG
3、重新编译FFmpeg启用openssl
打开《FFmpeg开发实战:从零基础到短视频上线》随书源码的chapter/config_ffmpeg_full.sh,将该文件另存为config_ffmpeg_openssl.sh,并在文件内部这行--enable-libx \的下面增加如下一行配置:
--enable-openssl \
将config_ffmpeg_openssl.sh上传到服务器的FFmpeg源码目录,执行以下命令赋予可执行权限:
chmod +x config_ffmpeg_openssl.sh
然后运行以下命令配置、编译和安装FFmpeg:
./config_ffmpeg_openssl.sh make clean make -j4 make install
4、将so文件导入App工程
(1)将FFmpeg交叉编译好的include目录(位于/usr/local/app_ffmpeg/include)整个复制到App工程的src/main/cpp目录下。
(2)在src\main目录下创建jniLibs目录,并在jniLibs下面创建子目录arm-v8a,将FFmpeg交叉编译好的8个so文件(位于/usr/local/app_ffmpeg/lib)全部复制到arm-v8a目录下。
(3)将config_ffmpeg_openssl.sh里面启用的几个第三方库的so文件也一起复制到arm-v8a目录下,包括x、x、mp3lame、freetype等。
(4)打开App工程的cpp代码,将待播放的在线视频地址改为https链接,重新编译安装App,即可正常播放https视频。