[FFmpeg-devel] [FFmpeg-cvslog] Merge commit '7cb1d9e2dbbe5bf4652be5d78cdd68e956fa3d63'
osmanx at problemloesungsmaschine.de
Sat Oct 14 11:24:56 EEST 2017
On 10/14/2017 01:32 AM, James Almer wrote:
> On 10/13/2017 6:30 PM, Reino Wijnsma wrote:
>> On 13-10-2017 18:48, James Almer <jamrial at gmail.com> wrote:
>>> Are "-lshlwapi -lpthread -lcrypt32"
>>> extralibs you added manually, or were they derived from dependencies
>>> like libmpg123, vorbis, etc by pkg-config?
>> My configure line up until now with the manually added extra-libs:
>> # ./configure --arch=x86 --target-os=mingw32
>> --pkg-config=pkg-config --pkg-config-flags=--static
>> --extra-version=Reino --enable-gray --enable-version3 --disable-debug
>> --disable-doc --disable-htmlpages --disable-manpages --disable-podpages
>> --disable-schannel --disable-txtpages --disable-w32threads
>> --enable-avisynth --enable-avresample --enable-fontconfig
>> --enable-frei0r --enable-filter=frei0r --enable-gmp --enable-gnutls
>> *--extra-libs=-lcrypt32* --enable-gpl --enable-libass --enable-libbluray
>> --enable-libbs2b --enable-libcaca --extra-cflags=-DCACA_STATIC
>> --enable-libfdk-aac --enable-libflite --enable-libfreetype
>> --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc
>> *--extra-libs=-lpthread* --enable-libmp3lame --enable-libmysofa
>> --enable-libopencore-amrnb --enable-libopencore-amrwb
>> --enable-libopenh264 --enable-libopenmpt *--extra-libs=-lshlwapi*
>> --enable-libopus --enable-librubberband --enable-libsnappy
>> --enable-libsoxr --enable-libspeex --enable-libtheora
>> --enable-libtwolame --extra-cflags=-DLIBTWOLAME_STATIC
>> --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis
>> --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265
>> --enable-libxavs --enable-libxml2 --enable-libxvid --enable-libzimg
>> --enable-libzvbi --extra-cflags='-march=pentium3' --extra-cflags=-O2
>> --extra-cflags='-mfpmath=sse' --extra-cflags=-msse --enable-static
>>> See if adding -lstdc++ fixes it.
>> It does.
> Ok, fixing this way then.
> Consider reporting this bug to libopenmpt, while at it. They should add
> -lstdc++ to their pkg-config file for static builds, instead of projects
> using the library having to workaround it.
I'm the libopenmpt maintainer.
The problem is not solved by adding a hard-coded -lstdc++ to pkg-config
Libs.private. This would only be correct if the C++ standard library is
actually called "libstdc++" on the given platform. In particular, it is
not called libstdc++ on FreeBSD and macOS (where LLVM libc++ is used by
default) and libstdc++ might be available additionally. Android is even
worse with its many available C++ standard libraries.
Sadly, I am not aware of an easy and fail-proof way to detect the name
of the C++ standard library from within the build system. As far as I
know (please correct me if I am wrong), there is no gcc or clang option
to actually return it (which could be used in an Autoconf check). For
clang, it can even be chosen by the user when building by specifying
appropriate CXXFLAGS (-stdlib=[libstdc++|libc++]).
The problem is fundamentally inherent to statically linking libraries
implemented in C++ with pkg-config. "Libs.private: -lstdc++" would fix
the default Linux setup with GCC (and cross-compiling with MinGW), but
would break FreeBSD and macOS. I'd rather prefer to not handle that and
leave it up to the user who builds (the user knows which build
system/target/platform system is used and can thus add the required C++
standard library when using static linking (or use the C++ compiler
instead of the linker for linking everything, however this implies using
a C++ compiler for libraries that themselves do not actually use C++ in
the first place)). I am fully aware that this is not a perfect solution,
but frankly, I do not think there is one available with the current
There was also a discussion on the pkg-config mailing list not too long
ago which further goes into details about the issue (talking about a
different library, but it applies equally well to the ffmpeg /
More information about the ffmpeg-devel