[FFmpeg-trac] #7785(build system:new): [Android] Configure script: Wrong HAVE_ macros are created due to "-f may not be used without -shared" error
FFmpeg
trac at avcodec.org
Mon Mar 11 01:40:03 EET 2019
#7785: [Android] Configure script: Wrong HAVE_ macros are created due to "-f may
not be used without -shared" error
-------------------------------------+-------------------------------------
Reporter: ESt | Type: defect
Status: new | Priority: normal
Component: build | Version: git-
system | master
Keywords: Android, | Blocked By:
shared, configure, ld, HAVE |
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug:
While building for Android the configuration script seems to create some
wrong HAVE_ macros, e. g. #define HAVE_ATANF 0, HAVE_CBRT 0,
HAVE_LOCALTIME_R 0, etc. Which later on causes issues with the build
itself, e.g.:
{{{
./libavutil/libm.h:61:31: error: static declaration of 'cbrtf' follows
non-static declaration
static av_always_inline float cbrtf(float x)
}}}
The source of the problem seems to be that the 'test_ld' function throws
the following error for those functions "-f may not be used without
-shared". I've added ''$(if [ shared="yes" ] ; then echo "-shared" ; fi)''
to the last line of test_ld, and it seemed to fix the problem for that
build:
(I'm not submitting a patch since I'm not sure this is the way the problem
should be solved and I'm afraid it might cause errors with other builds)
{{{
test_ld(){
log test_ld "$@"
type=$1
shift 1
flags=$(filter_out '-l*|*.so' $@)
libs=$(filter '-l*|*.so' $@)
test_$type $($cflags_filter $flags) || return
flags=$($ldflags_filter $flags)
libs=$($ldflags_filter $libs)
test_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs
$extralibs $(if [ shared="yes" ] ; then echo "-shared" ; fi)
}
}}}
How to reproduce:
{{{
The configure command I ran was:
./configure --prefix=android/arm64-v8a --disable-asm --enable-cross-
compile --disable-static --disable-programs --disable-doc --enable-shared
--enable-protocol=file --enable-pic --enable-small --disable-pthreads
--ar=/home/es/Android/Sdk/ndk-bundle//toolchains/aarch64-linux-
android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar
--strip=/home/es/Android/Sdk/ndk-bundle//toolchains/aarch64-linux-
android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip
--ld=/home/es/Android/Sdk/ndk-bundle//toolchains/aarch64-linux-
android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld
--cc=/home/es/Android/Sdk/ndk-bundle//toolchains/llvm/prebuilt/linux-
x86_64/bin/clang --cxx=/home/es/Android/Sdk/ndk-
bundle//toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
--as=/home/es/Android/Sdk/ndk-bundle//toolchains/llvm/prebuilt/linux-
x86_64/bin/clang --target-os=android --extra-cflags='-target aarch64-none-
linux-android -mfpu=neon -mfloat-abi=soft -I/home/es/Android/Sdk/ndk-
bundle//sysroot/usr/include/aarch64-linux-android -O3 -fPIC' --extra-
ldflags='-L/home/es/Android/Sdk/ndk-bundle//toolchains/aarch64-linux-
android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9.x
-L/home/es/Android/Sdk/ndk-bundle//platforms/android-21/arch-arm64/usr/lib
-lc' --sysroot=/home/es/Android/Sdk/ndk-bundle//sysroot --extra-libs=-lgcc
Then I ran 'make' and got the make error above (or you can see the ld
error in the config log or the macros in config.h)
}}}
My NDK version is r19b and my OS is Arch-Linux
I'll attach the config.log in the files of this ticket
--
Ticket URL: <https://trac.ffmpeg.org/ticket/7785>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list