美文网首页FFmpegAndroid知识程序员
ffmpeg链接第三方库OpenSSL问题“ERROR: ope

ffmpeg链接第三方库OpenSSL问题“ERROR: ope

作者: 片片碎 | 来源:发表于2018-03-08 17:50 被阅读66次

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,看到报错如下:

从上面日志可以看出:

1) 使用ls命令查看路径根本不存在,这个路径不存在,但是根据我的./configure,我导入的路径都是对的,如下:

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”

因为我的库是同事之前编译好的,不记得是什么版本的,所以通过以下命令查看下版本号,顺便查看下二进制文件的符号化函数,验证一下,结果如下:版本为OpenSSL 1.1.0e,只在SSL里面找到“OPENSSL_init_ssl”

因为懒得重新编译OpenSSL,所以暂时修改FFmpeg的configure如下:

暂时不修改脚本,直接修改FFMpeg的configure,修改库名字和函数名字,因为我脚本里面是使用check_lib的方式导入库的,修改后如下:

最后编译成功。但是修改源码里面的东西不是最好的方法,所以最好的方法应该是:

1)关于库名字:最好编译出来的库,是“ssl crypto”,如果不是写脚本的时候,使用软链接指定,不要在FFmpeg里面的源码修改

2)关于函数名变更:导入第三方库使用pkg_config,这个需要有pkg文件,如下:

所以推荐做法

先自己编译好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

相关文章

网友评论

    本文标题:ffmpeg链接第三方库OpenSSL问题“ERROR: ope

    本文链接:https://www.haomeiwen.com/subject/cviefftx.html