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的版本是

MacOS编译ffmpeg 出现 ERROR: openssl not found_第1张图片

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

MacOS编译ffmpeg 出现 ERROR: openssl not found_第2张图片

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/[email protected]/1.1.1k/ , 所以使用的时候需要注意一下,看看自己的路径是什么。
之后,我的/usr/local/Cellar/[email protected]/1.1.1k/lib/pkgconfig/ 下存在三个.pc文件,实际运行的时候,需要ln -s这三个文件才可以。

libcrypto.pc	libssl.pc	openssl.pc

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

你可能感兴趣的:(ffmpeg,macos,视频编解码)