在 Msys2 中使用 x264 为 Visual Studio 编译 ffmpeg 的静态库,但从未找到 libx264
Compiling static libs of ffmpeg with x264 in Msys2 for Visual Studio, but libx264 is never found
之前使用 MSYS2 和 Visual Studio 2015 x64 工具链将 ffmpeg 4.2.2 下载并编译为静态库。我想从 VLC/VideoLan 添加 x264 编解码器,并将其编译到静态库中。但是,运行ning Configure for ffmpeg 会产生一个错误 "libx264 not found."
我在“/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 Command Prompt"
- 从那个 VS2015 命令提示符,运行 "c:\msys64\msys2_shell.cmd -mingw64 -use-full-path"
- 从 MSYS2 内部 shell, 运行 "cd /c/ThirdParty/opt"
- git 克隆 http://git.videolan.org/git/x264.git
- cd 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 的配置输出是 "ERROR: libx264 not found"。
我也尝试过使用这两行代替上面的第 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
此版本将通过 Configure,我可以在其中 运行 "make",但是 make 失败,链接时出现一系列未解析的 X264_* 函数 ffmpeg_g.exe,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 目录。
我最近 most 次尝试生成的错误如下所示:
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选项有问题,但在尝试变化和google搜索后,我来问你。 你知道这个 ffmpeg 配置行有什么问题吗?第 10 步,同上。
在 libavcodec\libx264.c:
中注释或删除此行
#if defined(_MSC_VER)
#define X264_API_IMPORTS 1
#endif
这可能有助于解决您的 unresolved external symbol
错误。
至于原始项目 10 的错误,你为指向 lib 目录而不是 pkgconfig 目录的 PKG_CONFIG_PATH 设置了错误的值。
之前使用 MSYS2 和 Visual Studio 2015 x64 工具链将 ffmpeg 4.2.2 下载并编译为静态库。我想从 VLC/VideoLan 添加 x264 编解码器,并将其编译到静态库中。但是,运行ning Configure for ffmpeg 会产生一个错误 "libx264 not found."
我在“/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 Command Prompt"
- 从那个 VS2015 命令提示符,运行 "c:\msys64\msys2_shell.cmd -mingw64 -use-full-path"
- 从 MSYS2 内部 shell, 运行 "cd /c/ThirdParty/opt"
- git 克隆 http://git.videolan.org/git/x264.git
- cd 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 的配置输出是 "ERROR: libx264 not found"。
我也尝试过使用这两行代替上面的第 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
此版本将通过 Configure,我可以在其中 运行 "make",但是 make 失败,链接时出现一系列未解析的 X264_* 函数 ffmpeg_g.exe,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 目录。
我最近 most 次尝试生成的错误如下所示:
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选项有问题,但在尝试变化和google搜索后,我来问你。 你知道这个 ffmpeg 配置行有什么问题吗?第 10 步,同上。
在 libavcodec\libx264.c:
中注释或删除此行#if defined(_MSC_VER)
#define X264_API_IMPORTS 1
#endif
这可能有助于解决您的 unresolved external symbol
错误。
至于原始项目 10 的错误,你为指向 lib 目录而不是 pkgconfig 目录的 PKG_CONFIG_PATH 设置了错误的值。