以下以SRT ver 1.4.3為例
這個(gè)版本可能會(huì)過(guò)時(shí), 但編譯方法都是一樣的.
我會(huì)將影響版本編譯的地方, 插入一些說(shuō)明.
1.基本環(huán)境準(zhǔn)備
- MacOS
- Homebrew
Homebrew安裝
打開(kāi)終端輸入
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2.編譯環(huán)境準(zhǔn)備
通過(guò)Homebrew安裝
-
cmake
ver 2.8.12 或更高
brew install cmake
-
pkg-config
brew install pkg-config
-
openssl
ver 1.1
一般來(lái)說(shuō), MacOS都會(huì)自帶, 注意版本號(hào)
brew install openssl
Q: 我可能沒(méi)有. 或者說(shuō) 我怎么找到本地中安裝的openssl?
A: /usr/local/Cellar/openssl/版本號(hào)/bin/openssl
如果沒(méi)有你需要按照上面自己安裝一個(gè), 版本盡量滿足1.1的要求(1.1.x)
Q: 我有openssl, 怎樣知道他是否生效呢?
A: 在終端中輸入下面命令
openssl version
Q: 我有openssl, 但使用openssl version
時(shí), 提示我沒(méi)有找到這個(gè)命令
A: 你需要link一下
注意openssl的路徑中帶有版本號(hào).
所以復(fù)制粘貼的時(shí)候, 你需要結(jié)合自身的環(huán)境修改.
我的環(huán)境中如下
ln -s /usr/local/Cellar/openssl/1.1.1k/bin/openssl /usr/local/bin
在這一切結(jié)束后, 你要知道你的openssl
版本號(hào), 因?yàn)橄旅鏁?huì)用到.
3.SRT的準(zhǔn)備
選擇一種方式, 將代碼下載下來(lái)
git clone https://github.com/Haivision/srt.git
4.OpenSSL-for-iOS的準(zhǔn)備
OpenSSL for iOS 在GitHub中的地址
選擇一種方式, 將代碼下載下來(lái)
git clone https://github.com/x2on/OpenSSL-for-iPhone.git
Q: 剛剛不是才安裝過(guò)openssl嗎?
A: 這個(gè)是給iOS環(huán)境用的, 結(jié)合Xcode工具鏈編譯的.
Q: 為什么特別說(shuō)明結(jié)合Xcode工具鏈編譯的
A: 因?yàn)椴煌ㄟ^(guò)Xcode工具鏈編譯, 在iOS中就用不了啊(笑)
5.OpenSSL-for-iOS編譯
當(dāng)你下載ok后, 進(jìn)入到OpenSSL-for-iPhone
文件中, 執(zhí)行
還記得上面讓你記錄的版本號(hào)嗎? 請(qǐng)?jiān)谶@里配置他
--version=1.1.x
sh ./build-libssl.sh --version=1.1.1d
不出意外的話, 編譯完成后, 你可以在OpenSSL-for-iPhone/bin
中找到一些SDK文件
比如iPhoneOS14.5-arm64.sdk
這個(gè)就是在Xcode中可以使用的openssl靜態(tài)庫(kù)
他們都是使用處理器架構(gòu)命名的
如果你的項(xiàng)目中需要支持多種處理器架構(gòu), 你需要將同名的下列文件合并到一起
libssl.a
libcrypto.a
只是簡(jiǎn)單的合并兩個(gè)庫(kù)的話, 使用下面的命令后, 路徑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
如果你需要合并三個(gè)及以上, 你可以參考這篇文章
以上完成后, 還需要做一些事情
- 新建一個(gè)文件夾起名為
openssl-iOS
- 將SDK中的
include
拷貝進(jìn)來(lái) (任何一個(gè)SDK中的都可以) - 將SDK中的
lib
拷貝進(jìn)來(lái) (如果你的.a是自己合成的, 那就拷貝你的.a) - 將
lib
中的package
文件夾刪除掉
你的openssl文件中, 應(yīng)該是這樣的結(jié)構(gòu)
openssl-iOS
+-- lib
+-- libssl.a
+-- libcrypto.a
+-- include
+-- xxxx.h
+-- ...(.h有很多)
記得這個(gè)openssl-iOS
文件夾, 一會(huì)兒要用到他.
6.SRT編譯
首先, 在終端中進(jìn)入到srt文件夾中, (如果你下載的是zip包, 文件夾叫srt-master)
cd srt
配置三個(gè)環(huán)境變量
這里配置的是安裝到你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"
然后再配置一個(gè)環(huán)境變量
這里配置的是, 在iOS環(huán)境中, srt依賴的openssl
這里用到的是上面
openssl-iOS
文件夾的路徑
為了方便說(shuō)明
我沒(méi)有為自己創(chuàng)建openssl-iOS
路徑
而是直接使用OpenSSL-for-iPhone/bin
下的SDK文件夾作為路徑
如果是你的話, 應(yīng)該在export IOS_OPENSSL=
后面寫上openssl-iOS
的絕對(duì)路徑
export IOS_OPENSSL="/Users/panda/source/OpenSSL-for-iPhone/bin/iPhoneOS14.5-arm64.sdk"
ok到這一步為止, 一切準(zhǔn)備妥當(dāng)
如果你的cmake沒(méi)有問(wèn)題的話, 你可以開(kāi)始編譯了
以下是三條命令合一, 你可以一起使用, 也可以逐條使用
./configure --cmake-prefix-path=$IOS_OPENSSL --use-openssl-pc=OFF --cmake-toolchain-file=scripts/iOS.cmake
make
make install
7.編譯后的處理
編譯結(jié)束后, 你需要找到你的include和.a文件,他們的路徑在下面
/usr/local/lib/libsrt.a
/usr/local/include/srt
你可以創(chuàng)建一個(gè)lib
文件夾
將上面openssl-iOS
中的文件
和剛剛生成的srt
相關(guān)文件, 全部放進(jìn)去, 整理成如下結(jié)構(gòu)
同一個(gè)
include
中, 盡量不要混放多個(gè)庫(kù)的.h文件
我建議你為他們創(chuàng)建一個(gè)以庫(kù)名命名的文件夾收納, 方便管理
當(dāng)然這只是一個(gè)建議
lib
+-- libssl.a
+-- libcrypto.a
+-- libsrt.a
+-- include
+-- srt
+-- xxxx.h
+-- ...(.h有很多)
+-- openssl
+-- xxxx.h
+-- ...(.h有很多)
將他導(dǎo)入你的Xcode中
設(shè)置Header Search Paths
Targets
→Build Settings
→Search Paths
→Header Search Paths
加入$(PROJECT_DIR)/Project名稱/lib/include
設(shè)置為recursive
, 以便讓Xcode明白這里需要遞歸搜索設(shè)置Library Search Paths
Targets
→Build Settings
→Search Paths
→Library Search Paths
加入$(PROJECT_DIR)/Project名稱/lib
設(shè)置為recursive
, 以便讓Xcode明白這里需要遞歸搜索加入Framework
在Targets
→General
→Frameworks, Libraries, and Embedded Content
中
點(diǎn)擊+
添加一個(gè)
libc++.1.tbd
然后點(diǎn)擊+
選擇Add Other...
加入下列
libssl.a
libcrypto.a
libsrt.a
如果有幫助到您的話, 期待您的打賞
如果有疑問(wèn)的話, 歡迎隨時(shí)提問(wèn)
如果有錯(cuò)誤的話, 歡迎您的指正