LINUX.ORG.RU

Сборка libx264 c Android NDK

 , , ,


0

1

Хочу собрать вот такую штуку https://github.com/begeekmyfriend/yasea/tree/master/app/src/main/libenc/jni/l...

В папке есть скрипт android_build.sh который запускает
configure
make

При умолчанию заданных параметрах скрипт собирает либу под arm, но мне нужно собрать ее под x86_64

Я изменил скрипт на следующий

ANDROID_NDK=/root/android-ndk-r12b
SYSROOT=$ANDROID_NDK/platforms/android-16/arch-x86
CROSS_PREFIX=$ANDROID_NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-
D__ANDROID__ -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__"
EXTRA_CFLAGS="-march=x86-64 -mfloat-abi=softfp -mfpu=neon -D__ANDROID__"
EXTRA_LDFLAGS="-nostdlib"
PREFIX=`pwd`/../lib

./configure --prefix=$PREFIX \
        --host=x86_64-linux \
        --sysroot=$SYSROOT \
        --extra-cflags="$EXTRA_CFLAGS" \
        --extra-ldflags="$EXTRA_LDFLAGS" \
        --enable-pic \
        --enable-static \
        --enable-strip \
        --disable-cli \
        --disable-win32thread \
        --disable-avs \
        --disable-swscale \
        --disable-lavf \
        --disable-ffms \
        --disable-gpac \
        --disable-lsmash


пишет
No working C compiler found.


Я изменил в путях arm на x86_64, они правильные и существуют

ls -l /root/android-ndk-r12b/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/
x86_64-linux-android-addr2line
x86_64-linux-android-ar
x86_64-linux-android-as
x86_64-linux-android-c++
x86_64-linux-android-c++filt
x86_64-linux-android-cpp
x86_64-linux-android-dwp
x86_64-linux-android-elfedit
x86_64-linux-android-g++
x86_64-linux-android-gcc
x86_64-linux-android-gcc-4.9
x86_64-linux-android-gcc-4.9.x
x86_64-linux-android-gcc-ar
x86_64-linux-android-gcc-nm
x86_64-linux-android-gcc-ranlib
x86_64-linux-android-gcov
x86_64-linux-android-gcov-tool
x86_64-linux-android-gprof
x86_64-linux-android-ld
x86_64-linux-android-ld.bfd
x86_64-linux-android-ld.gold
x86_64-linux-android-nm
x86_64-linux-android-objcopy
x86_64-linux-android-objdump
x86_64-linux-android-ranlib
x86_64-linux-android-readelf
x86_64-linux-android-size
x86_64-linux-android-strings
x86_64-linux-android-strip


Вопрос: что делать, как быть? )

★★★★

не знаю, в чем там дело, но -mfpu=neon точно лишнее, если компиляем под x86

anonymous
()

еще одно: -march=x86-64

anonymous
()
Ответ на: комментарий от anonymous

Убрал все флаги EXTRA_CFLAGS - тоже самое

gobot ★★★★
() автор топика

Вопрос: что делать, как быть? )

Прежде чем выдать «No working C compiler found» наверняка где то пишет почему оно так решило. Оно наверное пытается скомпилировать проверочные куски кода и смотрит смогло ли. Наверняка из за того что не все ARM-овские инструкции задисаблил. В общем, поищи в логах.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

В NDK нет вообще никаких логов.

gobot ★★★★
() автор топика

Вот что удалось найти

cat config.log
x264 configure script
Command line options: "--prefix=/var/www/cli/android-encoder/yasea-master/app/src/main/libenc/jni/libx264/../lib" "--host=x86_64-linux" "--sysroot=/root/android-ndk-r12b/platforms/android-16/arch-x86" "--extra-cflags=" "--extra-ldflags=-nostdlib" "--enable-pic" "--enable-static" "--enable-strip" "--disable-cli" "--disable-win32thread" "--disable-avs" "--disable-swscale" "--disable-lavf" "--disable-ffms" "--disable-gpac" "--disable-lsmash"

checking whether gcc works... no
Failed commandline was:
--------------------------------------------------
gcc conftest.c -m64  -Wall -I. -I$(SRCPATH) --sysroot=/root/android-ndk-r12b/platforms/android-16/arch-x86     -m64  --sysroot=/root/android-ndk-r12b/platforms/android-16/arch-x86 -nostdlib -lm -o conftest
/usr/bin/ld: warning: libc.so.6, needed by /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 000000000040026b
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `strlen@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `strtold@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `stderr@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `strtod@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `strtof@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `sprintf@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `__assert_fail@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `errno@GLIBC_PRIVATE'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `fwrite@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `__errno_location@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `qsort@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `fputs@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.so: undefined reference to `__get_cpu_features@GLIBC_PRIVATE'
collect2: error: ld returned 1 exit status
--------------------------------------------------
Failed program was:
--------------------------------------------------
int main (void) {  return 0; }
--------------------------------------------------
DIED: No working C compiler found.

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot
libc.so.6 ... not found

Ты хочешь собрать адроидную либу под Linux/x86 или под Android/x86? И много у тебя еще таких "-D__ARM_ARCH_7__ -D__ARM_ARCH_7A__"?

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)
Ответ на: комментарий от I-Love-Microsoft

Хочу собрать под Android/x86 на Linux-x86_64
Блин я не понимаю почему этой libc.so.6. Под ARM ведь нормально собирается из того же NDK
"-D__ARM_ARCH_7__ -D__ARM_ARCH_7A__" только в configure были, я все убрал. ХЗ как там в коде - код не мой и в С я особо не шарю, чтобы искать там

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Тогда странно что оно требует libc6 линуксовую, ведь андроид имеет свой аналог. Ты кажись перестарался вычищая ARM убил Android.

Еще даю подсказку, не поверишь, можно написать разработчикам - там ты быстрее решишь проблему. Может они вовсе не подразумевают работу их библиотеки на Android/x86 и порт еще не сделан, а ты пытаешься страдаешь, а ничего не выйдет.

И да, это оригинальная libx264 или может какой-то форк для Android конкретно?

I-Love-Microsoft ★★★★★
()

Ну да, так и есть, форк какого-то китайца, может он только под ARM подзаточил, а поддержку Android/x86 еще не нарулил

I-Love-Microsoft ★★★★★
()

Может, --host=x86_64-linux-android?

CYB3R ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Китайчика спрашивал, но молчит что то
Вообщем разобрался, нужно было sysroot собрать для x86_64, в стандартном NDK для android-16 был только x86 и только в 21 появился x86_64

Собирается он так, может кому нужно будет

biuld/tools/make-standalone-toolchain.sh --arch=x86_64 --platform=android-21 --toolchain=x86_64-linux-androideabi-4.9 --install-dir=$HOME/x86_64 --ndk-dir=/root/android-ndk-r12b

В configure
SYSROOT=$HOME/x86_64/sysroot
EXTRA_CFLAGS="-march=core-avx-i -mtune=core-avx-i -m64 -mmmx -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mpopcnt -D__ANDROID__ -D__x86_64__"


Кстати в проверял -match=native тоже работает, что правильней писать туда native или core-avx-i?

gobot ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.