RK1109平台 KVSwebrtc移植生成静态库过程
必备条件:科学上网
1、拉取源代码
https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git
2.更改 srtp的CMakeLists
在CMAKE_ARGS 中添加
-D TEST_APPS=OFF
更改这个的目的是为了不生成测试文件,嵌入式编译器不认-lpthread
3.执行cmake
执行指令
1、设置对应的编译工具为交叉编译工具**(重要)**
export CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ LD=arm-linux-gnueabihf-ld AR=arm-linux-gnueabihf-ar
2、创建build文件夹
mkdir build && cd build
3、外部构建 - > 执行cmake
cmake .. -DBUILD_SAMPLE=FALSE -DBUILD_STATIC_LIBS=TRUE -DUSE_OPENSSL=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32 -DOPENSSL_EXTRA="no-async" -DBUILD_LIBSRTP_HOST_PLATFORM=x86_64 -DBUILD_LIBSRTP_DESTINATION_PLATFORM=arm-linux-gnueabihf -DADD_MUCLIBC=TRUE
参数说明
DBUILD_SAMPLE=FALSE 目的与前面类似,避免出现-lpthread 找不到的问题
DBUILD_STATIC_LIBS表示生成静态库
DUSE_OPENSSL 表示使用openssl
DBUILD_OPENSSL_PLATFORM 表示openssl 平台 linux-generic32 表示32位机
DOPENSSL_EXTRA表示openssl编译时的编译选项 no-async表示交叉编译工具链没有提供GNU C的ucontext库
DBUILD_LIBSRTP_HOST_PLATFORM 表示srtp编译平台 ubuntu下可以使用uname -a 获取
DBUILD_LIBSRTP_DESTINATION_PLATFORM 表示srtp 目标平台 参数填交叉编译工具链相关的平台参数
DADD_MUCLIBC 表示是否需要避免不同gcc版本兼容,需要加上,有的交叉编译工具使用的是uclibc ,有的使用的是glibc两者在源码结构和二进制上不兼容。
可以查看目录下 CMake/Dependencies 文件夹中各个编译库的编译选项内容进行相应配置
如果ssl不能使用,可以尝试使用mbedtls
指令
cmake .. -DBUILD_SAMPLE=FALSE -DBUILD_STATIC_LIBS=TRUE -DUSE_OPENSSL=FALSE -DUSE_MBEDTLS=TRUE -DBUILD_LIBSRTP_HOST_PLATFORM=x86_64 -DBUILD_LIBSRTP_DESTINATION_PLATFORM=arm-linux-gnueabihf -DADD_MUCLIBC=TRUE
执行过程比较漫长,会自动去下载各种开源库,请保证网络通畅,耐心等待。
4、执行make
生成的open-source其中include 和lib文件中的内容即是我们需要的内容,除此之外还需要将build文件夹中的两个.a找到并移到lib文件夹中
得到kvs webrtc库,按需使用即可
使用生成的库制做动态库
制作
如果需要使用亚马逊sdk编译出来的库制作静态或者动态库需要注意连接关系和编译顺序,下面进行一个说明
cmake制作动态库时,添加完头文件路径和库文件路径后,在连接库的选项中
添加如下图选项
-Wl,–start-group
-Wl,–end-group
二者构成的条件,告诉编译器不需要管连接顺序,避免出现库中缺少方法的问题
使用
使用时,也有顺序要求,按上述方法可以避免,在使用时,还需要进行c库的连接
如图 ssl需要pthread 和dl 库,否则也会报缺少方法的问题