visual studio r17b r16 ndk64 ndk android-ndk

android ndk - studio - Android: error: no se puede abrir crtbegin_dynamic.o: no existe dicho archivo o directorio



ndk bundle android studio (4)

Ok mirando hacia atrás hice mi toolchain para Android-9 por el comando ...

~ / Desarrollo / Android / android-ndk-r8c / build / tools / make-standalone-toolchain.sh --platform = android-9 --install-dir = / tmp / my-toolchain

Cuando corrí ...

<install>/android-ndk-r8c$ find ./ -name crtbegin_dynamic* .//platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o .//platforms/android-14/arch-mips/usr/lib/crtbegin_dynamic.o .//platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o .//platforms/android-3/arch-arm/usr/lib/crtbegin_dynamic.o .//platforms/android-4/arch-arm/usr/lib/crtbegin_dynamic.o .//platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o .//platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o .//platforms/android-9/arch-mips/usr/lib/crtbegin_dynamic.o .//platforms/android-9/arch-x86/usr/lib/crtbegin_dynamic.o

Como puede ver, mi instalación de android-9 por alguna razón no tiene este archivo. Reconstruí para android-14 y todo funciona bien. ¿Alguien tiene una idea de cómo se puso así? ¿El archivo Bonehead se mueve de mi parte?

Usé lo siguiente ...

~ / Desarrollo / Android / android-ndk-r8c / build / tools / make-standalone-toolchain.sh --platform = android-9 --install-dir = / Users / me / toolchain

Luego creo el siguiente archivo de código ...

int main () { return 0; }

Lo intenté ...

<toolchain>/arm-linux-androideabi-gcc test.c

También intenté

<toolchain>/arm-linux-androideabi-gcc --sysroot=<toolchain>/sysroot test.c

Ambos vuelven ...

toolchain/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory


Para hacerlo más simple, simplemente configure el sysroot:

<toolchain>/arm-linux-androideabi-g++ ~/test.c -o ~/test --sysroot=/home/user/android-ndk/platforms/android-9/arch-arm/


/ arm-linux-androideabi-gcc test.c

Te estás perdiendo sysroot en este.

/ arm-linux-androideabi-gcc --sysroot = / sysroot test.c

Este, sysroot está mal. Debería ser similar a:

--sysroot=/opt/android-ndk-r9/platforms/android-18/arch-arm

También necesita exportar LD (todas las herramientas deben estar en la ruta):

$ echo $PATH /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin: /opt/android-sdk-macosx/tools/:/opt/android-sdk-macosx/platform-tools/:/opt/local/bin: /opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin $ echo $LD arm-linux-androideabi-ld

Probablemente deberías exportar todas las herramientas en la cadena de herramientas:

export CPP=arm-linux-androideabi-cpp export CC=arm-linux-androideabi-gcc export CXX=arm-linux-androideabi-g++ export LD=arm-linux-androideabi-ld export AS=arm-linux-androideabi-as export AR=arm-linux-androideabi-ar export RANLIB=arm-linux-androideabi-ranlib

Si está trabajando en un proyecto Autoconf, agregue estos:

$ echo $ANDROID_SYSROOT /opt/android-ndk-r9/platforms/android-18/arch-arm export CPPFLAGS="--sysroot=$ANDROID_SYSROOT" export CFLAGS="--sysroot=$ANDROID_SYSROOT" export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"


Esto es lo que funcionó para mí, llegué a esta pregunta con el mismo problema, estoy tratando de construir la cadena de herramientas gcc-4.8 en el NDK y encontré el mismo problema. Lo que es un poco diferente a pesar de mi situación es que estoy construyendo en un dispositivo Android, lo que significa que tengo la biblioteca Bionic libc.so y libdl.so en /system/lib . Estaba recibiendo este error al configurar para libgomp :

toolchain-build/binutils-2.23/ld/ld-new: cannot find crtbegin_dynamic.o: No such file or directory toolchain-build/binutils-2.23/ld/ld-new: cannot find -lc toolchain-build/binutils-2.23/ld/ld-new: cannot find -ldl toolchain-build/binutils-2.23/ld/ld-new: cannot find crtend_android.o: No such file or directory

El archivo Make estaba configurando una opción -B en un directorio particular toolchain/gcc-4.8/gcc/ así que creé enlaces simbólicos de esas dos librerías compartidas en /system/lib a gcc-4.8/gcc . Luego crtbegin_dynamic.o y crtend_android.o a los archivos de objetos crtbegin.o y crtend.o que fueron compilados e instalados en toolchain-build / prefix / lib / gcc / arm-linux-androideabi / 4.8 / the comando find` puede ayuda a encontrarlos

Los comandos que utilicé para hacer que los enlaces simbólicos se vieran así:

ln -s ../../prefix/lib/gcc/arm-linux-androideabi/4.8/crtend.o crtend_android.o

desde el toolchian-build/gcc-4.8/gcc , para mí eso funcionó porque ahí es donde la configuración apuntaba a buscar con la opción -B make pasó a xgcc .

Espero que ayude a alguien. Hora de pasar a libatomic ; )