Having previously downloaded and compiled ffmpeg 4.2.2 to static libraries using MSYS2 and the Visual Studio 2015 x64 tool chain. I want to add the x264 codec from VLC/VideoLan, compiling that to a static library as well. However, running Configure for ffmpeg produces an error saying "libx264 not found."
I built ffmpeg without VideoLAN's x264 at "/c/ThirdParty/opt/ffmpeg-4.2.2" with "make install" installing to "/c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build" .
I am using the following steps to compile from source x264 and add it to the ffmpeg build using the same VS2015 tool chain:
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
The steps work, compiling x264 fine, but the output for ffmpeg's Configure is "ERROR: libx264 not found".
I have also tried the variation of using these two lines in place of steps 6 and 10 above:
This version will get past Configure, where I am able to run "make", but the make fails with a series of unresolved X264_* functions while linking ffmpeg_g.exe, 14 unresolved functions in total. The errors at shown at the bottom, but first:
When I look in /c/ThirdParty/opt/ffmpeg-4.2.2/ffmpeg_build/lib I see:
$ 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
Likewise for /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
And looking in /usr/local/lib I see libx264.lib and the pkgconfig directory.
The errors generated by my most recent attempts look like:
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
Maybe something wrong with the --extra-ldflags or --extra-libs options of ffmpeg's Configure, but after trying variations and google searching, I come asking you. Do you know what is wrong with this ffmpeg Configure line? Step 10, above.
Comment or remove this lines in libavcodec\libx264.c:
#if defined(_MSC_VER)
#define X264_API_IMPORTS 1
#endif
This probably should help with your unresolved external symbol
errors.
As for errors with original item 10 than you set wrong value for PKG_CONFIG_PATH pointing to lib dir instead of pkgconfig dir.