Android: erreur: Impossible d'ouvrir crtbegin dynamic.o: Aucun fichier ou répertoire

j'ai utilisé le suivant...

~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --=plate-forme android-9 --install-dir=/Users/moi/de la chaîne

puis je crée le fichier de code suivant...

int main ()
{
  return 0;
}

j'ai essayé ...

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

j'ai aussi essayé

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

les deux reviennent...

 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
20
demandé sur Jackie 2013-05-28 19:14:22

4 réponses

pour simplifier, il suffit de mettre le systroot:

<toolchain>/arm-linux-androideabi-g++ ~/test.c -o ~/test --sysroot=/home/user/android-ndk/platforms/android-9/arch-arm/
19
répondu BlueSilver 2013-07-11 06:24:53

/arm-linux-androideabi-gcc test.c

Vous êtes absent sysroot dans celui-ci.


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

celui-ci, sysroot c'est faux. Il ahould être similaires à:

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

vous devez aussi exporter LD (tous les outils doivent être sur path):

$ 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

vous devriez probablement exporter tous les outils chaîne de compilation:

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 vous travaillez sur un Autoconf projet, ajouter:

$ 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"
10
répondu jww 2014-01-09 14:06:07

OK en regardant en arrière j'ai fait ma chaîne d'outils pour Android-9 par la commande...

~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --=plate-forme android-9 --install-dir=/tmp/mon-toolchain

Quand j'ai couru...

<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

Comme vous pouvez le voir mon installation de android-9 pour une raison quelconque n'a pas ce fichier. J'ai reconstruit pour android-14 et tout fonctionne bien. Quelqu'un a une idée de comment ça a été comme ça? Bonehead file déplacer de ma part?

2
répondu Jackie 2013-05-28 16:15:56

C'est ce qui a fonctionné pour moi, je suis venu à cette question avec le même problème, j'essaie de construire la chaîne d'outils gcc-4.8 dans le NDK et j'ai rencontré le même problème. La chose thats un peu différent cependant à propos de Ma situation est que je construis sur un appareil Android, ce qui signifie que j'ai la bibliothèque bionique libc.so et libdl.so/system/lib. J'ai eu cette erreur lors de la configuration de 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

le fichier Make définissait un -B option d'un répertoire particulier toolchain/gcc-4.8/gcc/ alors j'ai créé des liens symboliques à partir de ces deux libs partagés en /system/libgcc-4.8/gcc. Ensuite, j'ai un lien symbolique crtbegin_dynamic.o et crtend_android.o pour les fichiers objets crtbegin.o et crtend.o cela a été compilé et installé dans toolchain-build / prefix/lib/gcc/arm-linux-androideabi/4.8/therechercher " commande peut vous aider à les trouver.

Les commandes que j'ai utilisé pour faire les liens symboliques ressemblait à ceci:

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

à partir de l'intérieur de l' toolchian-build/gcc-4.8/gcc répertoire, pour moi qui a fonctionné parce que c'est là que la configuration pointait pour chercher avec le -B option make passé xgcc.

j'espère que ça aide quelqu'un. L'heure de passer à libatomic;)

0
répondu Overloaded_Operator 2014-07-14 11:02:28