MacOS编译ffmpeg 出现 ERROR: openssl not found

今天心血来潮,突然想开始研究ffmpeg的源码,所有依赖库下载完成后,在用一下命令configure的时候
sh configure --prefix=/usr/local/ffmpeg \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-postproc \
--enable-libass \
--disable-libcelt \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libopenjpeg \
--enable-openssl \
--enable-libopus \
--enable-libspeex \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libxvid \
--disable-static \
--disable-x86asm \
--enable-shared
出现。 ERROR: openssl not found 的报错,我用的openssl的版本是

openssl版本

然后解决方式是从这里看到的

在这里插入图片描述

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
写完之后就configure成功了!

如果你遇到一些其它的问题比如,下面这种,只需要对应的文件删除,重新configuration就好了

config.h is unchanged
libavutil/avconfig.h is unchanged
libavfilter/filter_list.c is unchanged
libavcodec/codec_list.c is unchanged
libavcodec/parser_list.c is unchanged
libavcodec/bsf_list.c is unchanged
libavformat/demuxer_list.c is unchanged
libavformat/muxer_list.c is unchanged
libavdevice/indev_list.c is unchanged
libavdevice/outdev_list.c is unchanged
libavformat/protocol_list.c is unchanged
ffbuild/config.sh is unchanged

之后我再次看了一下这个问题

原因是因为在configure,发现报是在这里

enabled openssl           && { { check_pkg_config openssl "openssl >= 3.0.0" openssl/ssl.h OPENSSL_init_ssl &&
                                 { enabled gplv3 || ! enabled gpl || enabled nonfree || die "ERROR: OpenSSL >=3.0.0 requires --enable-version3"; }; } ||
                               { enabled gpl && ! enabled nonfree && die "ERROR: OpenSSL <3.0.0 is incompatible with the gpl"; } ||
                               check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
                               check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
                               check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
                               die "ERROR: openssl not found"; }

然后看check_pkg_config函数的具体实现

check_pkg_config(){
    log check_pkg_config "$@"
    name="$1"
    test_pkg_config "$@" &&
        eval add_cflags \$${name}_cflags
}

test_pkg_config(){
    log test_pkg_config "$@"
    name="$1"
    pkg_version="$2"
    pkg="${2%% *}"
    headers="$3"
    funcs="$4"
    shift 4
    disable $name
    test_cmd $pkg_config --exists --print-errors $pkg_version || return
    pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
    pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
    pkg_incdir=$($pkg_config --variable=includedir $pkg_config_flags $pkg)
    check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
        enable $name &&
        set_sanitized "${name}_cflags"    $pkg_cflags &&
        set_sanitized "${name}_incdir"    $pkg_incdir &&
        set_sanitized "${name}_extralibs" $pkg_libs
}

其中报错的是在 test_cmd $pkg_config --exists --print-errors $pkg_version
这玩意实际上就是运行pkg_config --exists --print-errors openssl 然后如果没有异常,可以使用pkg_config找到openssl,就正确,如果有没找到,就会输出log,告诉你没找到,然后此时就return。
然后看看pkg_config是啥, 简单的来说 它就是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件,通俗的讲,就是查看库的,所以这个问题实际上是如何让pkg_config检测到openssl。
于是乎找到了这篇文章。它这里写的和我实际的有些不一样。
首先,我的openssl路径是 /usr/local/Cellar/openssl@1.1/1.1.1k/ , 所以使用的时候需要注意一下,看看自己的路径是什么。
之后,我的/usr/local/Cellar/openssl@1.1/1.1.1k/lib/pkgconfig/ 下存在三个.pc文件,实际运行的时候,需要ln -s这三个文件才可以。

libcrypto.pc	libssl.pc	openssl.pc

按照这种解决方式也可以解决openssl not found

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值