交叉编译第三方库(srt例)
**1.交叉编译器**
从 https://www.linaro.org/downloads/ 下载 与开发板平台对应的 交叉编译器的二进制文件 压缩包
解压后可直接使用
**2.在上位机使用交叉编译器编译srt源码**
从https://github.com/Haivision/srt下载srt源码压缩包
解压压缩包生成srt-master文件夹
~$cd srt-master
SRT模块交叉编译之前,需要先configure,configure时必须的两个参数分别是:“--prefix”和“--with-compiler-prefix”。 “--prefix”表示的是编译完成之后,“make install”命令将编译结果拷贝的目录; “--with-compiler-prefix”则是编译器的路径。
./configure --prefix=/home/nyl/work/package/git_base/srt/lower/ --with-compiler-prefix=/opt/AAR/bin/aarch64-linux-gnu-
configure之后,依次make;make install; 编译结果就被拷贝到了“--prefix”所指定的目录了。
需要注意的是:
--有些比较旧的编译器,可能还需要在configure时,加上选项“--disable-c++11”
--有些编译环境,没有SRT依赖的openssl库;编译时会出错,这时就需要先编译openssl,并安装到交叉编译环境中(交叉编译openssl源码生成的库和头文件放至交叉编译器默认搜索的路径,可类比第三方库libpthread.so所在位置,)
--有时,编译不过,可以先手动删除CMakeCache.txt,避免错误配置的影响
开源库openssl编译说明
openssl的编译方法与SRT类似,源码来自于openssl的官网(https://www.openssl.org/source/)。
交叉编译前,也需要configure,必须的选项分别是“--prefix”、“CROSS_COMPILE”,configure的例子如下:
./Configure linux-aarch64 no-asm shared no-async --prefix=/home/nyl/work/package/git_base/openssl/lower/ CROSS_COMPILE=/opt/AAR/bin/aarch64-linux-gnu-
需要注意的是:
--选项 “linux-aarch64”与“linux-generic32”分别代表64位ARM和32位处理器, 如果是其他类型的处理器,建议用./Configure --help来找一个对应的处理器
--选项“-no-asm”,表示编译时,不用汇编加速
--选项“no-async”,表示编译器不支持ucontext库,一般的编译环境都支持,除了部分海思
--编译之后,生成的头文件拷贝到/opt/AAR/aarch64-linux-gnu/libc/usr/include
生成的库文件拷贝到/opt/AAR/aarch64-linux-gnu/libc/usr/lib (可选择软链接方式 ln -s /源路径(生成库的路径) /目的路径(交叉编译器默认搜索的路径))
**3.生成srt库和头文件移植到开发板**
将srt库放入/usr/local/lib 并软链接至/usr/lib (有时运行报错,软链接时需加绝对路径)
将srt头文件放入/usr/local/include 编写代码时需调绝对路径 例:#inlucde "/usr/local/include/srt/srt.h"
**4.PC在交叉编译需链接srt库**
build.sh脚本文件编写