美文网首页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