2017-01-20 1 views
0

J'ai un programme C qui est compilé en utilisant gcc dans ubuntu. Je veux exécuter cet exécutable dans le terminal Android. Quand je l'exécute, il montre soit "fichier ou répertoire introuvable" ou "non exécutable: ELF32". Je veux exécuter le code dans le terminal Android. Y at-il un moyen ou des drapeaux dans gcc ou en utilisant un autre compilateur afin que je puisse exécuter mon code dans le terminal Android.Comment faire pour exécuter un programme C dans le terminal android-x86?

Répondre

0

Android n'utilise pas les mêmes bibliothèques système qu'Ubuntu et ne peut donc pas être trouvé.

Il y a deux solutions:

  1. Copiez les bibliothèques dont vous avez besoin.

    Si vous pouvez les placer dans les mêmes emplacements de système de fichiers qu'Ubuntu, alors vous aurez besoin de lancer ld-linux.so manuellement et de lui indiquer où trouver les bibliothèques. Ou, vous pouvez relier le programme de sorte qu'il s'attend à trouver l'éditeur de liens dynamique et les bibliothèques dans un endroit non standard. Vous pouvez également utiliser un chroot, mais cela nécessite root, et vous aurez besoin de trouver un binaire chroot qui fonctionne.

  2. Utilisez un lien statique.

    Cela signifie généralement simplement passer -static à GCC. Vous obtenez un binaire beaucoup plus grand qui devrait être entièrement autonome, sans dépendances. Il nécessite que les versions statiques de toutes vos bibliothèques soient disponibles sur votre système build. En outre, certaines fonctionnalités (telles que la recherche DNS) attendent toujours une bibliothèque partagée, elles ne fonctionneront donc pas de cette façon.

Même alors, vous devriez vous attendre à ce que certaines fonctionnalités Linux ne fonctionnent pas. Fondamentalement, tout ce qui nécessite des fonctionnalités matérielles ou des fichiers de configuration dans/etc va nécessiter beaucoup d'efforts. Il y a plusieurs projets qui l'ont déjà fait (recherche "linux chroot android"). Je ne suis pas sûr de ce que signifie le message "non exécutable: ELF32", mais vous devriez vérifier si vous construisez des exécutables 32 ou 64 bits, et que les binaires Android utilisent (file <whatever> devrait vous le dire).

+0

J'ai compilé avec -static, mais il montre la deuxième erreur c'est-à-dire "non exécutable: ELF32". Il y a des drapeaux spécifiques à android dans gcc comme -mandroid qui va compiler pour la plate-forme Android. Mais son montrant une erreur comme "/ usr/bin/ld: ne peut pas trouver crtbegin_static.o: Aucun fichier ou répertoire collect2: erreur: ld a renvoyé 1 statut de sortie" .. Si vous savez quoi que ce soit à ce sujet, s'il vous plaît aider. –

+0

Y a-t-il des indices dans les journaux? (Exécutez 'logcat'.) L'idée est que Android utilise SELinux et qu'il existe peut-être une politique de sécurité sur votre chemin. – ams