Des problèmes de compilation objet à l'aide d'arm-linux-androideabi-gcc
Fond
- OSX OS
- R8 NDK
Je suis en train de compiler la classe suivante à l'aide de l'Android compilateur GCC...
#include <stdint.h>
int main (void){
return 0;
}
Je fais le avec la commande suivante...
un@un:~/Development/Code/OpenGL$ ~/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc hello.c -o hello
- Je obtenir...
In file included from hello.c:1:0:
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/include/stdint.h:3:26: fatal error: stdint.h: No such file or directory
compilation terminated.
En raison d'un manque de gcc connaissance (mais certains de Google capacité) je trouve que ce et de l'essayer...
un@un:~/Development/Code/OpenGL$ ~/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc hello.c -o hello -ffreestanding
et je reçois...
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl
collect2: ld returned 1 exit status
Quelqu'un peut m'aider avec ce que je fais de mal? Ai-je raté un lien ou quelque chose? Android.mk n'est pas une option.
Mise à JOUR de ce qui ne fonctionne pas non plus...
arm-linux-androideabi-gcc hello.c --sysroot=~/Development/Android/android-ndk-r8c/platforms/android-9/arch-arm
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl
collect2: ld returned 1 exit status
OriginalL'auteur Jackie | 2013-01-13
Vous devez vous connecter pour publier un commentaire.
Vous devez indiquer à GCC où trouver le système Android, les fichiers et les en-têtes. Soit utiliser:
ndk-build
et unAndroid.mk
avecBUILD_EXECUTABLE
--sysroot
GCC avec l'option[1]
[2]
sysroot de travail (vous devez avoir fait une erreur ou une faute de frappe). Les solutions ci-dessus sont des variantes de la même chose: dites à votre compilateur où trouver les ressources du système. Pas plus, pas moins. Et si vous avez besoin pour obtenir les étapes détaillées/drapeaux utilisés officiellement, il suffit d'utiliser
ndk-build V=1
pour voir les résultats.Il ne fonctionne pas voici mon code... arm-linux-androideabi-gcc hello.c --sysroot=~/Développement/Android/android-ndk-r8c/plates-formes/android-9/arch-bras
N'utilisez pas de ~ (tilde).
sysroot peut pas de travail. voir stackoverflow.com/a/37464870/493161
OriginalL'auteur deltheil
Donc, puisque je ne veux pas utiliser Android.mk fichier, je suis allé de l'avant et a créé autonome de la chaîne. ceci est fait en utilisant la suite...
Je voudrais savoir ce que l ' "alternative" est dans les termes de la gcc reliant j'ai pu faire.
J'ai besoin de quelques arguments de plus dans un Ubuntu OS: /home/utilisateur/android-ndk-r10d/build/outils de dollars ./make-standalone-toolchain.sh --=plate-forme android-21 --install-dir=/tmp/mon-toolchain --de la chaîne d'=arm-linux-androideabi-4.9 --système=linux-x86_64 Et pour Mac OS X: /Users/utilisateur/android-ndk-r10d/build/outils de dollars ./make-standalone-toolchain.sh --=plate-forme android-21 --install-dir=/tmp/mon-toolchain --ndk-dir=/Users/utilisateur/android-ndk-r10d/ --la chaîne d'=arm-linux-androideabi-4.9 --système=darwin-x86_64
OriginalL'auteur Jackie
Cette réponse, qui ajoute un peu plus de détails à @deltheil de réponse. J'ai eu des problèmes similaires, comme j'ai essayé de compiler I2C-tools pour le débogage du bus I2C sur Android. En quelque sorte, après avoir lutté pendant plus d'une journée avec les de rendre les fichiers et d'essayer différentes options, y compris --sysroot & --dynamique-options du linker etc., J'ai finalement essayé de le compiler à l'intérieur de l'Android PSBA arbre. J'ai utilisé le Google Nexus S PSBA pour créer un fichier binaire que j'ai prévu pour fonctionner sur Samsung S3 téléphone. J'ai créé un dossier appelé i2c-tools pour les sources à l'intérieur de l'AFST/dossier externe et copié Android.mk, Cleanspec.mk & MODULE_LICENCE à partir d'un autre dossier exécutable (ping) et l'a modifié pour l'i2c-tools comme suit:
Alors j'ai juste couru:
de l'AFST dossier de base et le tour est joué, j'ai eu un travail exécutable dans/cible/produit/générique/system/bin/dossier. Notez que j'ai dû copier tous besoin de source et les fichiers d'en-tête à partir de l'original (i2c-tools)/outils & inclure des dossiers et eu à modifier certaines des #include pour supprimer le chemin supplémentaire pour les fichiers d'en-tête qui se trouvait au même endroit que le c-source.
OriginalL'auteur VeRaj
Dans mon cas, j'avais besoin d'un .o de fichier et n'ont pas besoin de définir main().
J'ai eu de spécifier le
-c
commutateur:où ~/ax et ~/un sont des liens:
ne factice.o.
OriginalL'auteur 18446744073709551615
j'ai résolu le problème ,
la valeur par défaut de compresser le gestionnaire de fichiers dans ubuntu n'était pas l'extraction de liens symboliques ,
j'ai donc essayé : tar jxf nom de fichier.le goudron.bz2
pour décompresser le ndk.le goudron.bz2 et maintenant il fonctionne très bien
OriginalL'auteur Piyush