- ffmpeg链接第三方库OpenSSL问题“ERROR: ope
- Android FFmpeg so库编译 支持Https
- iOS在项目中对ijkplayer集成ffmpeg遇到的问题
- 2020-09-05 Windows下编译ffmpeg+libr
- electron (跨平台桌面应用) 打包工具安装失败原因
- 阿里云centos 7.2编译安装php+nginx+mysql
- 制作FFmpeg动态库(make ffmpeg dynamic
- [转]Android Studio导入工程报错 Error:Ca
- Android记录一下ffmpeg libx265压缩视频
- Error:Plugin with id 'com.github
ffmpeg链接第三方库,步骤看起来很简单,这里拿链接第三方库OpenSSL做示范:
1.定义宏
OPENSSL=`pwd`/openssl
2.configure裁剪配置增加支持选项(增加需要增加的选项)
CONFIGURE_FLAGS="....." #此处省略
#假设现在需要增加https的请求
if [ "$OPENSSL" ]; then
CONFIGURE_FLAGS="$CONFIGURE_FLAGS \
--enable-protocol=https \
--enable-openssl --enable-protocol=crypto --enable-protocol=tls_openssl"
fi
3.第三方系统库增加
CFLAGS="...."
LDFLAGS="..."
if [ "$OPENSSL" ];then
CFLAGS="$CFLAGS -I$OPENSSL_PATH/android/android-armeabi/include " 增加第三库头文件的路径,可能还需要增加对应的系统文件
LDFLAGS="$LDFLAGS -L${OPENSSL_PATH}/libs/android/android-armeabi/lib -lssl_topvdn -lcrypto_topvdn" 增加第三库的路径,可能还需要增加对应的系统库
fi
以上就是链接第三方的库的方法,但是问题出现了,我直接使用了同事编译好的OpenSSL,iOS顺利链接成功,但是android一直编译不过。
错误:"ERROR: openssl not found"
打开FFmpeg的日志文件config.log,看到报错如下:
![](https://img.haomeiwen.com/i2048812/14f68f036dc4a735.png)
从上面日志可以看出:
1) 使用ls命令查看路径根本不存在,这个路径不存在,但是根据我的./configure,我导入的路径都是对的,如下:
![](https://img.haomeiwen.com/i2048812/4e3330107659636e.png)
2)我导入的库名字明明是“-lssl_topvdn -lcrypto_topvdn”却找得是“-lssl -lcrypto”,后面找不到又开始找“-lssl32 -leay32”
3)而且最开始是使用“use_pkg_config”找函数“OPENSSL_init_ssl”和“SSL_library_init”
后来使用“check_lib”只找“SSL_library_init”
打开FFmpeg源码下的的configure程序,发现链接Openssl时:
1)库的名字只能是ssl和crypto,而我的是-lssl_topvdn -lcrypto_topvd,,所以暂时就把FFmpeg的configure修改一下:
2)通过check_lib只查找“SSL_library_init”,通过“use_pkg_config”既能查找“OPENSSL_init_ssl”又能“SSL_library_init”,为什么会有这种写法呢?
后来查找openssl资料发现:OpenSSL1.1.0之后的版本使用“OPENSSL_init_ssl”替代之前的“SSL_library_init”
![](https://img.haomeiwen.com/i2048812/88ca982974489592.png)
因为我的库是同事之前编译好的,不记得是什么版本的,所以通过以下命令查看下版本号,顺便查看下二进制文件的符号化函数,验证一下,结果如下:版本为OpenSSL 1.1.0e,只在SSL里面找到“OPENSSL_init_ssl”
![](https://img.haomeiwen.com/i2048812/59fa2f87a3e9111a.png)
因为懒得重新编译OpenSSL,所以暂时修改FFmpeg的configure如下:
暂时不修改脚本,直接修改FFMpeg的configure,修改库名字和函数名字,因为我脚本里面是使用check_lib的方式导入库的,修改后如下:
![](https://img.haomeiwen.com/i2048812/51e83c9fd2151a0f.png)
最后编译成功。但是修改源码里面的东西不是最好的方法,所以最好的方法应该是:
1)关于库名字:最好编译出来的库,是“ssl crypto”,如果不是写脚本的时候,使用软链接指定,不要在FFmpeg里面的源码修改
2)关于函数名变更:导入第三方库使用pkg_config,这个需要有pkg文件,如下:
![](https://img.haomeiwen.com/i2048812/44612293da753bd5.png)
所以推荐做法
先自己编译好FFmpeg,生成如上lib:"libssl libcrypto"和pkgconfig文件
然后,:
1:export OpenSSL的pkgconfig
2:./config里面增加选项“-pkg-config=pkg-config”,一定要增加,否则还是会报错,还是找不到
./configure --help可以查看到这个选项目
--pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [pkg-config]
if [ "$OPENSSL" ]; then
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${OPENSSL_PATH}/android/android-armeabi/lib/pkgconfig
CONFIGURE_FLAGS="$CONFIGURE_FLAGS \
--pkg-config=pkg-config"
echo $PKG_CONFIG_PATH
fi
网友评论