[iOS] SRT编译傻瓜教程

以下以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的准备


SRT在GitHub中的地址

选择一种方式, 将代码下载下来

 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.alibcrypto.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
    TargetsBuild SettingsSearch PathsHeader Search Paths
    加入$(PROJECT_DIR)/Project名称/lib/include
    设置为recursive, 以便让Xcode明白这里需要递归搜索

  • 设置Library Search Paths
    TargetsBuild SettingsSearch PathsLibrary Search Paths
    加入$(PROJECT_DIR)/Project名称/lib
    设置为recursive, 以便让Xcode明白这里需要递归搜索

  • 加入Framework
    TargetsGeneralFrameworks, Libraries, and Embedded Content
    点击+添加一个
    libc++.1.tbd
    然后点击+选择Add Other...加入下列
    libssl.a
    libcrypto.a
    libsrt.a

如果有帮助到您的话, 期待您的打赏
如果有疑问的话, 欢迎随时提问
如果有错误的话, 欢迎您的指正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容