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

问题描述 投票:0回答:1

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

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

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

  1. 启动“ VS2015 x64 Natice工具命令提示符”
  2. 从该VS2015命令提示符运行“ c:\ msys64 \ msys2_shell.cmd -mingw64 -use-full-path”
  3. 从MSYS2 shell内部,运行“ cd / c / ThirdParty / opt”
  4. git clone http://git.videolan.org/git/x264.git
  5. cd x264
  6. CC = cl ./configure --enable-static --prefix = / c / ThirdParty / opt / ffmpeg-4.2.2 / ffmpeg_build --disable-cli
  7. make
  8. 进行安装
  9. cd ../ ffmpeg-4.2.2
  10. 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的Configure的输出是“ ERROR:not 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”,但是在链接ffmpeg_g.exe时,由于一系列未解析的X264_ *函数,make失败,总共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选项可能有问题,但是在尝试了变体和Google搜索之后,我来问你。你知道这个ffmpeg配置有什么问题吗?线?上面的步骤10。

ffmpeg configure msys2 libx264
1个回答
1
投票

注释或删除libavcodec \ libx264.c中的此行:

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

这可能有助于解决您的unresolved external symbol错误。至于原始项目10的错误,则应为PKG_CONFIG_PATH设置错误的值,使其指向lib目录而不是pkgconfig目录。

© www.soinside.com 2019 - 2024. All rights reserved.