[FFmpeg-devel] ffmpeg and musl toolchain support

Jörg Krause jkrause at posteo.de
Tue Sep 2 10:00:42 CEST 2014


On 09/01/2014 04:59 PM, wm4 wrote:
> On Mon, 01 Sep 2014 16:14:52 +0200
> Jörg Krause <jkrause at posteo.de> wrote:
>
>> When building against musl instead of glibc, compilation fails at
>> libavutil/error.c
>>
>> CC libavutil/error.o
>> libavutil/error.c: In function 'av_strerror':
>> libavutil/error.c:68:9: error: implicit declaration of function
>> 'strerror_r' [-Werror=implicit-function-declaration]
>> cc1: some warnings being treated as errors
>> make: *** [libavutil/error.o] Error 1
>>
>> I tried to find a fix and I am very unsure about the solution.
>>
>> I am cross compiling for a linux target. I took a look at
>> ffmpeg/configure and added the following line:
>>
>> # OS specific
>> case $target_os in
>> [..]
>> linux)
>>           add_cppflags -D_POSIX_SOURCE
>>           enable dv1394
>>           ;;
>> [..]
>>
>> With this I can compile ffmpeg successfully.
>>
>> What do you think about this solution?
>>
>> Why is #undef _GNU_SOURCE in libavutil/error.c defined?
> Because there are two strerror_r variants: standard and GNU. They have
> different semantics (but same signature). I guess this undef is supposed
> to select the POSIX one?
>
> In general, I suspect it might be best to never define _GNU_SOURCE, but
> _POSIX_C_SOURCE instead.
>
> Instead of breaking everything, maybe this would be best to put into
> error.c:
>
> #undef _GNU_SOURCE
> #define _POSIX_C_SOURCE 200809L

I see! I found this on the linux man page 
(http://linux.die.net/man/3/strerror_r) for strerror_r:

The XSI-compliant version of *strerror_r*() is provided if:
(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE
Otherwise, the GNU-specific version is provided.

And here 
(http://man7.org/linux/man-pages/man7/feature_test_macros.7.html) I 
found this:
*_POSIX_C_SOURCE *is defined, according to the value of *_XOPEN_SOURCE*:

    600 <= *_XOPEN_SOURCE *< 700: *_POSIX_C_SOURCE *is defined with the
    value 200112L.

So I will propose a patch with:

#undef _GNU_SOURCE
#define _XOPEN_SOURCE 600

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel



More information about the ffmpeg-devel mailing list