8
votes

Eclipse-CDT ne trouve pas de symboles STDLIB dans le projet NDK

J'essaie d'écrire une application Android simple à l'aide du NDK et C ++. Spécifiquement, j'aimerais utiliser GNUSTDC ++ inclus avec la nouvelle version du NDK (R7). La bibliothèque JNI a compilée et fonctionnait parfaitement comme c, mais maintenant que j'essaie d'introduire C ++, j'ai rencontré des problèmes.

J'ai ajouté $ {ndk_root} / sources / cxx-stl / gnu-libstdc ++ / include / sur les chemins d'accès à mon projet, et le #includes en ligne sont résolus. Cependant, tenter d'utiliser réellement une classe STL (telle que vecteur ), donne des résultats symbole 'Vector' n'a pas pu être résolu .

TOUT C symboles importés de et de tels travaux, jusqu'à ce que j'essaie de remplacer le #include avec . Ensuite, il échoue avec la fonction 'Malloc' n'a pas pu être résolue et ainsi de suite.

Curieusement, ajouter les en-têtes Stlport (en $ {NDK_ROOT} / Sources / CXX-STL / STLORT / STLORT ) corrige tous mes problèmes. Cependant, je suis relié à GNU C ++, pas de stlport, il s'agit donc d'une "solution" inconvenue et inappropriée au mieux. Il semble étrange que ces en-têtes fonctionnent, mais les autres ne le feraient pas. Est Eclipse omettant d'indexer ou de résoudre les en-têtes GNU C ++?

android.mk xxx

application.mk xxx

Edit: J'ai configuré mon projet basé sur:

http://mhandrrrrrrrroid.wordpress.com/2011/01/23/utenture-eclipse-for-android-cc-development/


0 commentaires

3 Réponses :


3
votes

Lisez ceci, il a la solution:

http: / /comments.gmane.org/gmane.fhandheldhelds.android.ndk/14371 p>

Le résumé, au cas où le lien meurt un jour est celui-ci: p>

C'est Un bug dans la déclaration du module GnustL_Shared. Désolé, cela sera corrigé dans la prochaine version. Entre-temps, vous pouvez changer manuellement $ NDK / Sources / CXX-STL / GNU-LIBSTDC ++ / android.mk code> et remplacer la ligne indiquant: p>

LOCAL_EXPORT_LDLIBS := $(call host-path,$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libsupc++.a)


2 commentaires

Malade confirmer cela sous peu, puis acceptez votre solution. Merci beaucoup!


Pour confirmer que j'ai frappé ce problème dans NDK-R8, mais pour confirmer que ce chemin a été ajouté à celui-ci dans la dernière version.



2
votes

Je sais que ce n'est pas une solution parfaite, mais au moins cela vous permettra de cliquer sur "Exécuter" ou "Débogage" via Eclipse:

  • Faites un clic droit sur votre projet Android C ++ et sélectionnez Propriétés.
  • Sous C / C ++ Général, cliquez sur "Analyse de code"
  • Basculez vers "Utiliser les paramètres du projet"
  • Commutatez toutes les erreurs que vous recevez en raison de l'utilisation de la classe de vecteur pour être "Avertissements".

    Pour moi, les erreurs que j'ai nécessaires pour passer jusqu'à présent sont:

    • "symbole n'est pas résolu"
    • "Déclaration membre non trouvée"
    • "Argument de modèle invalide"
    • "Arguments invalides"
    • "La méthode ne peut pas être résolue"

      Comme je l'ai dit, ce n'est pas parfait et que vous manquez de réelles erreurs en raison de cela, mais vous avez toujours la capacité de sélectionner habituellement «Aller à la déclaration» et certaines capacités de contrôle de la syntaxe, ainsi que la possibilité de lancer votre programme. L'étape de NDK-Build attrapera de toute façon des erreurs réelles, donc ce n'est vraiment pas une énorme perte. Honnêtement, je ne suis pas sûr de la source de cette question. Il est probable qu'il s'agisse d'être un bug eclipse.

      Off Sujet mais pertinent: Vous pouvez également utiliser le NDK-GDB via Eclipse. Le tutoriel est sur le blog lié à l'OP, mais Voici un lien direct quand même .

      Bonne chance!


      Edit (suivi):

      J'ai depuis compris un moyen de contourner ce problème, au moins sur ma boîte. L'OP a dit que, y compris les en-têtes de Stlport travaillaient pour lui. Ce n'est pas pour moi, au début. Je devais détruire mon projet Eclipse et commencer fraîche (pour une raison quelconque, cela ne me laisserait pas supprimer certaines définitions). Ajout de STLPORT Fixe des problèmes, mais dans NDK R7B, j'avais toujours des erreurs étranges (par exemple, NULL n'a pas été définie même après inclure STDDEF). J'ai fini par avoir à inclure aussi les en-têtes X86. Ceux-ci devraient se chevaucher largement avec les bras, cependant, il est utile d'avoir les bras «sur le dessus» de l'ordre incluant.

      Donc, si vous rencontrez dans le même problème que moi, ajoutez


      $ ndk_dir / plates-formes / Android-14 / Arch-x86 / usr / include


      à votre liste d'éclipse comprend également.


0 commentaires

0
votes

J'avais ce problème sur des fenêtres en raison des différents formats de chemins de Cygwin, mon shell préféré Windows, et qui utilise des chemins de style pseudo unix plutôt que des fenêtres. Si vous rencontrez ce problème et que vous avez des cygwins flottant dans votre chemin, Eclipse pourrait l'utiliser. Changer les chemins dans les propriétés> C Général> Les chemins et les symboles pour être style Cygwin plutôt que le style Windows (/ Cygwin / C / Android ... plutôt que c: \ Android ...) ... Quoi qu'il en soit, cela a travaillé pour moi .


0 commentaires