I used this rather absurd configure invocation:

BINDIR=$(realpath $(dirname $(ndk-which gcc)))
NDKDIR=$(dirname $(dirname $(dirname $(dirname $(dirname $BINDIR)))))
TARGET=16
ARCH=arm
TRIPLE=arm-linux-androideabi
SUFFIX=-4.9
PLATARCH=arm

../configure \
--enable-cross-compile \
--arch=$ARCH \
--cross_prefix="$NDKDIR/toolchains/$TRIPLE$SUFFIX/prebuilt/darwin-x86_64/bin/$TRIPLE-"
 \
--extra-cflags=-D__ANDROID_API__=$TARGET \
--extra-cflags="--sysroot=$NDKDIR/sysroot" \
--extra-cflags="-isystem $NDKDIR/sysroot/usr/include/$TRIPLE" \
--extra-cflags="-mfloat-abi=softfp" \
--extra-ldflags="--sysroot=$NDKDIR/platforms/android-$TARGET/arch-$PLATARCH" \
--extra-ldexeflags=-pie \
--enable-debug \
--target-os=android

The issue is that the unified headers don't declare mmap() on target API 
versions before 21 on 32-bit platforms when 
__USE_FILE_OFFSET64/_FILE_OFFSET_BITS=64 is set, because this sets off_t to be 
off64_t, and mmap64 isn't available until API 21. This doesn't matter for 
ffmpeg, since we never use the offset arg anyway, so we can just declare the 
function ourselves.

I'm not sure what one would do about this in configure.

> On Sep 26, 2017, at 06:27, Carl Eugen Hoyos <ceffm...@gmail.com> wrote:
> 
> 2017-09-26 3:52 GMT+02:00 Rodger Combs <rodger.co...@gmail.com>:
> 
>> +#  if defined(__USE_FILE_OFFSET64) && __ANDROID_API__ < 21 && 
>> !defined(__LP64__)
>> +#   ifdef mmap
>> +#    undef mmap
>> +#   endif
>> +void* mmap(void*, size_t, int, int, int, __kernel_off_t);
> 
> How can this issue be reproduced?
> 
> Shouldn't this be checked in configure?
> 
> Carl Eugen
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

Reply via email to