1.Windows10下编译64位openssl
2.Nginx编译所需基本库pcre、源码zlib、编译openssl
3.å¦ä½å¨ Windows ä¸ç¼è¯ OpenSSL
4.FFmpeg开发笔记(十六)Linux交叉编译Android的源码OpenSSL库
5.Windows下编译OpenSSL3.1.1
6.编译OpenSSL
Windows10下编译64位openssl
在Windows系统下进行位openssl编译,以下为详细步骤:
准备工具:确保安装了Microsoft Visual Studio,编译并确保已解压openssl源码。源码
执行编译步骤:
1.前往Microsoft Visual Studio目录,编译五花马源码找到并进入vcvarsall.bat所在目录。源码
2.在该目录中打开命令提示符,编译执行vcvarsall.bat x_amd命令。源码
3.切换到openssl源码解压目录,编译注意确保该cmd窗口与上一步的源码窗口在同一位置,以便后续命令执行。编译
4.在解压目录下,源码使用perl命令进行配置,编译exe提取源码命令格式为:D:\openssl\openssl-1.0.2o>perl Configure VC-WINA --prefix=D:\openssl\install。源码
5.继续执行ms\do_wina命令。
6.执行编译,此步骤可能需要较长时间,命令为:D:\openssl\openssl-1.0.2o>nmake -f ms\nt.mak。
7.继续执行安装命令:D:\openssl\openssl-1.0.2o>nmake -f ms\nt.mak install。
8.完成编译后,打开D:\openssl\install文件夹,即可找到编译好的文件。
个人经验分享:自行编译 openssl 过程中耗时较长,且部分教程表述不够清晰准确,故记录分享以供参考。
Nginx编译所需基本库pcre、骡马iptv源码zlib、openssl
在构建和配置 Nginx Web 服务器时,pcre、zlib 和 openssl 这三个基本库扮演着关键角色。它们各自提供核心功能:pcre 用于正则表达式处理,zlib 用于数据压缩,而 openssl 则确保安全的网络通信。在进行源码编译时,至关重要的是确保系统上安装了这些库的开发版本,以便编译器能够正确链接。
通常情况下,可以通过包管理器轻松安装这些库的开发版本,按照官方指南进行编译。php台球源码然而,如果在编译过程中遇到错误,如提示缺少 openssl-devel,可能是因为缺少了 SSL 模块所需的 OpenSSL 库。解决方法是安装 OpenSSL,或者将其静态编译到 Nginx 中,使用 --with-openssl= 选项。
对于静态编译,比如指定 pcre 的源码路径,Nginx 将直接包含 PCRE 的代码,不再依赖系统中的动态库。这意味着即使不安装系统库,编译后的tbox源码mcu Nginx 仍然能运行,但前提是正确配置了库路径。
如果选择通过 rpm 包安装 Nginx,比如从 nginx.org/packages 下载的版本,通常情况下,rpm 包已经包含了编译后的 Nginx 二进制文件,因此无需额外安装 pcre-devel、zlib-devel 和 openssl-devel。这意味着在这些情况下,基本库的编译步骤可以省略。
å¦ä½å¨ 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"å°±å¯ä»¥äºã
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代码,将待播放的在线视频地址改为/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”命令不可用。确保已安装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版本,只需针对相应命令进行操作。参考资料:
(省略参考资料链接)2024-12-28 14:18
2024-12-28 14:10
2024-12-28 13:33
2024-12-28 12:57
2024-12-28 12:52
2024-12-28 12:12