ffmpeg - 在 Msys2 for Visual Studio 中使用 x264 编译 ffmpeg 的静态库,但从未找到 libx264

标签 ffmpeg configure msys2 libx264

之前使用 MSYS2 和 Visual Studio 2015 x64 工具链下载并编译 ffmpeg 4.2.2 到静态库。我想从 VLC/VideoLan 添加 x264 编解码器,并将其编译到静态库中。但是,为 ffmpeg 运行配置会产生错误提示“找不到 libx264”。

我在“/c/ThirdParty/opt/ffmpeg-4.2.2”处构建了没有VideoLAN的x264的ffmpeg,“make install”安装到“/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build”。

我正在使用以下步骤从源 x264 编译并使用相同的 VS2015 工具链将其添加到 ffmpeg 构建中:

  • 启动“VS2015 x64 Natice Tools 命令提示符”
  • 在 VS2015 命令提示符下,运行“c:\msys64\msys2_shell.cmd -mingw64 -use-full-path”
  • 从 MSYS2 shell 内部,运行“cd/c/ThirdParty/opt”
  • git 克隆 http://git.videolan.org/git/x264.git
  • 光盘 x264
  • CC=cl ./configure --enable-static --prefix=/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build --disable-cli
  • 制作
  • 安装
  • cd ../ffmpeg-4.2.2
  • PKG_CONFIG_PATH=/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build/lib\
    ./configure --prefix=./ffmpeg_build --toolchain=msvc --arch=x86_64\
    --target-os=win64 --extra-cflags=-MT --extra-cxxflags=-MT\
    --extra-ldflags=-L/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build/lib\
    --enable-x86asm --enable-asm --enable-static --disable-shared\
    --disable-debug --enable-gpl --enable-avresample --enable-libx264

  • 这些步骤有效,可以很好地编译 x264,但是 ffmpeg 的配置输出是“错误:找不到 libx264”。

    我还尝试了使用这两行代替上面的步骤 6 和 10 的变体:
  • CC=cl ./configure --enable-static --prefix=/usr/local --disable-cli
  • PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --prefix=./ffmpeg_build --toolchain=msvc --arch=x86_64 --target-os=win64 --extra-cflags=-MT -- extra-libs=/usr/local/lib/libx264.lib --extra-cxxflags=-MT --enable-x86asm --enable-asm --enable-static --disable-shared --disable-debug --enable -gpl --enable-avresample --enable-libx264

  • 这个版本将通过配置,我可以在其中运行“make”,但是在链接 ffmpeg_g.exe 时,make 失败并出现一系列未解析的 X264_* 函数,总共 14 个未解析的函数。底部显示的错误,但首先是:

    当我查看/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build/lib 时,我看到:
    $ ls -l ./ffmpeg_build/lib
    total 50988
    -rw-r--r-- 1 blake blake 27184250 May 11 16:29 libavcodec.a
    -rw-r--r-- 1 blake blake   231304 May 11 16:29 libavdevice.a
    -rw-r--r-- 1 blake blake  8574628 May 11 16:29 libavfilter.a
    -rw-r--r-- 1 blake blake  8081930 May 11 16:29 libavformat.a
    -rw-r--r-- 1 blake blake  1300118 May 11 16:29 libavutil.a
    -rw-r--r-- 1 blake blake    61844 May 11 16:29 libpostproc.a
    -rw-r--r-- 1 blake blake   348732 May 11 16:29 libswresample.a
    -rw-r--r-- 1 blake blake  1316008 May 11 16:29 libswscale.a
    -rw-r--r-- 1 blake blake  5086976 May 28 18:08 libx264.lib
    drwxr-xr-x 1 blake blake        0 May 28 18:08 pkgconfig
    

    同样对于/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build/lib/pkgconfig:
    $ ls -l ./ffmpeg_build/lib/pkgconfig/
    total 9
    -rw-r--r-- 1 blake blake 353 May 11 16:29 libavcodec.pc
    -rw-r--r-- 1 blake blake 554 May 11 16:29 libavdevice.pc
    -rw-r--r-- 1 blake blake 449 May 11 16:29 libavfilter.pc
    -rw-r--r-- 1 blake blake 393 May 11 16:29 libavformat.pc
    -rw-r--r-- 1 blake blake 306 May 11 16:29 libavutil.pc
    -rw-r--r-- 1 blake blake 317 May 11 16:29 libpostproc.pc
    -rw-r--r-- 1 blake blake 322 May 11 16:29 libswresample.pc
    -rw-r--r-- 1 blake blake 315 May 11 16:29 libswscale.pc
    -rw-r--r-- 1 blake blake 300 May 28 18:08 x264.pc
    

    并查看/usr/local/lib 我看到 libx264.lib 和 pkgconfig 目录。

    我最近尝试产生的错误如下所示:
    LD      ffmpeg_g.exe
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_default referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_parse referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_default_preset referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_apply_fastfirstpass referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_param_apply_profile referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_picture_init referenced in function X264_frame
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_open_160 referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_reconfig referenced in function reconfig_encoder
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_headers referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_encode referenced in function X264_frame
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_close referenced in function X264_close
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_delayed_frames referenced in function X264_frame
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_encoder_maximum_delayed_frames referenced in function X264_init
    libavcodec.a(libx264.o) : error LNK2019: unresolved external symbol __imp_x264_levels referenced in function X264_init
    ffmpeg_g.exe : fatal error LNK1120: 14 unresolved externals
    make: *** [Makefile:111: ffmpeg_g.exe] Error 96
    

    ffmpeg 的 Configure 的 --extra-ldflags 或 --extra-libs 选项可能有问题,但在尝试变体和谷歌搜索后,我来问你。 你知道这个 ffmpeg 配置行有什么问题吗?上面的第 10 步。

    最佳答案

    在 libavcodec\libx264.c 中注释或删除以下行:

    #if defined(_MSC_VER)
    #define X264_API_IMPORTS 1
    #endif
    

    这可能对您的 unresolved external symbol 有所帮助错误。
    至于原始项目 10 的错误,您为指向 lib 目录而不是 pkgconfig 目录的 PKG_CONFIG_PATH 设置了错误的值。

    关于ffmpeg - 在 Msys2 for Visual Studio 中使用 x264 编译 ffmpeg 的静态库,但从未找到 libx264,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62077528/

    相关文章:

    python - 为什么这个带有线程的 Popen 不起作用?

    java - 如何为 Tomcat 配置 CometConnectionManagerValve?

    linux - 我在 Mac 上没有 use/local/src/,我该怎么办?

    python - 跨gdb找不到python

    video - 循环叠加输入视频

    macos - Mac Terminal (Bash) 批处理程序使用 ffmpeg 获取多媒体文件信息

    bash - 使用 shell 变量传递选项时,autotools 配置错误

    windows - 从 MSYS2 使用 Rust 在 Windows 上安装 Cargo

    windows - 如何在 Windows 上分发 GTK+ 应用程序?

    php - php中的ffmpeg进度百分比