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
; )