以下以SRT ver 1.4.3为例
这个版本可能会过时, 但编译方法都是一样的.
我会将影响版本编译的地方, 插入一些说明.
1.基本环境准备
- MacOS
- Homebrew
Homebrew安装
打开终端输入
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2.编译环境准备
通过Homebrew安装
-
cmake
ver 2.8.12 或更高
brew install cmake
-
pkg-config
brew install pkg-config
-
openssl
ver 1.1
一般来说, MacOS都会自带, 注意版本号
brew install openssl
Q: 我可能没有. 或者说 我怎么找到本地中安装的openssl?
A: /usr/local/Cellar/openssl/版本号/bin/openssl
如果没有你需要按照上面自己安装一个, 版本尽量满足1.1的要求(1.1.x)
Q: 我有openssl, 怎样知道他是否生效呢?
A: 在终端中输入下面命令
openssl version
Q: 我有openssl, 但使用openssl version
时, 提示我没有找到这个命令
A: 你需要link一下
注意openssl的路径中带有版本号.
所以复制粘贴的时候, 你需要结合自身的环境修改.
我的环境中如下
ln -s /usr/local/Cellar/openssl/1.1.1k/bin/openssl /usr/local/bin
在这一切结束后, 你要知道你的openssl
版本号, 因为下面会用到.
3.SRT的准备
选择一种方式, 将代码下载下来
git clone https://github.com/Haivision/srt.git
4.OpenSSL-for-iOS的准备
OpenSSL for iOS 在GitHub中的地址
选择一种方式, 将代码下载下来
git clone https://github.com/x2on/OpenSSL-for-iPhone.git
Q: 刚刚不是才安装过openssl吗?
A: 这个是给iOS环境用的, 结合Xcode工具链编译的.
Q: 为什么特别说明结合Xcode工具链编译的
A: 因为不通过Xcode工具链编译, 在iOS中就用不了啊(笑)
5.OpenSSL-for-iOS编译
当你下载ok后, 进入到OpenSSL-for-iPhone
文件中, 执行
还记得上面让你记录的版本号吗? 请在这里配置他
--version=1.1.x
sh ./build-libssl.sh --version=1.1.1d
不出意外的话, 编译完成后, 你可以在OpenSSL-for-iPhone/bin
中找到一些SDK文件
比如iPhoneOS14.5-arm64.sdk
这个就是在Xcode中可以使用的openssl静态库
他们都是使用处理器架构命名的
如果你的项目中需要支持多种处理器架构, 你需要将同名的下列文件合并到一起
libssl.a
libcrypto.a
只是简单的合并两个库的话, 使用下面的命令后, 路径3下的libssl.a
和libcrypto.a
是最终生成的fat包
lipo -create 路径1/libssl.a 路径2/libssl.a -output 路径3/libssl.a
lipo -create 路径1/libcrypto.a 路径2/libcrypto.a -output 路径3/libcrypto.a
如果你需要合并三个及以上, 你可以参考这篇文章
以上完成后, 还需要做一些事情
- 新建一个文件夹起名为
openssl-iOS
- 将SDK中的
include
拷贝进来 (任何一个SDK中的都可以) - 将SDK中的
lib
拷贝进来 (如果你的.a是自己合成的, 那就拷贝你的.a) - 将
lib
中的package
文件夹删除掉
你的openssl文件中, 应该是这样的结构
openssl-iOS
+-- lib
+-- libssl.a
+-- libcrypto.a
+-- include
+-- xxxx.h
+-- ...(.h有很多)
记得这个openssl-iOS
文件夹, 一会儿要用到他.
6.SRT编译
首先, 在终端中进入到srt文件夹中, (如果你下载的是zip包, 文件夹叫srt-master)
cd srt
配置三个环境变量
这里配置的是安装到你mac中的openssl的路径
export OPENSSL_ROOT_DIR=$(brew --prefix openssl)
export OPENSSL_LIB_DIR=$(brew --prefix openssl)"/lib"
export OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)"/include"
然后再配置一个环境变量
这里配置的是, 在iOS环境中, srt依赖的openssl
这里用到的是上面
openssl-iOS
文件夹的路径
为了方便说明
我没有为自己创建openssl-iOS
路径
而是直接使用OpenSSL-for-iPhone/bin
下的SDK文件夹作为路径
如果是你的话, 应该在export IOS_OPENSSL=
后面写上openssl-iOS
的绝对路径
export IOS_OPENSSL="/Users/panda/source/OpenSSL-for-iPhone/bin/iPhoneOS14.5-arm64.sdk"
ok到这一步为止, 一切准备妥当
如果你的cmake没有问题的话, 你可以开始编译了
以下是三条命令合一, 你可以一起使用, 也可以逐条使用
./configure --cmake-prefix-path=$IOS_OPENSSL --use-openssl-pc=OFF --cmake-toolchain-file=scripts/iOS.cmake
make
make install
7.编译后的处理
编译结束后, 你需要找到你的include和.a文件,他们的路径在下面
/usr/local/lib/libsrt.a
/usr/local/include/srt
你可以创建一个lib
文件夹
将上面openssl-iOS
中的文件
和刚刚生成的srt
相关文件, 全部放进去, 整理成如下结构
同一个
include
中, 尽量不要混放多个库的.h文件
我建议你为他们创建一个以库名命名的文件夹收纳, 方便管理
当然这只是一个建议
lib
+-- libssl.a
+-- libcrypto.a
+-- libsrt.a
+-- include
+-- srt
+-- xxxx.h
+-- ...(.h有很多)
+-- openssl
+-- xxxx.h
+-- ...(.h有很多)
将他导入你的Xcode中
设置Header Search Paths
Targets
→Build Settings
→Search Paths
→Header Search Paths
加入$(PROJECT_DIR)/Project名称/lib/include
设置为recursive
, 以便让Xcode明白这里需要递归搜索设置Library Search Paths
Targets
→Build Settings
→Search Paths
→Library Search Paths
加入$(PROJECT_DIR)/Project名称/lib
设置为recursive
, 以便让Xcode明白这里需要递归搜索加入Framework
在Targets
→General
→Frameworks, Libraries, and Embedded Content
中
点击+
添加一个
libc++.1.tbd
然后点击+
选择Add Other...
加入下列
libssl.a
libcrypto.a
libsrt.a
如果有帮助到您的话, 期待您的打赏
如果有疑问的话, 欢迎随时提问
如果有错误的话, 欢迎您的指正