NOTE: il semble qu’il s’agisse d’une question récurrente sur StackOverflow, mais pour ce que j’ai vu, les gens ne trouvent jamais un moyen ou leur solution ne fonctionne pas pour moi.
J’utilise Eclipse Juno ADT. Tout fonctionnait bien jusqu’à ce que j’essaye de mettre à jour le NDK. J’ai remplacé mon dossier ndk
( ndk-r8d
) par la nouvelle version ( ndk-r8e
) et, dans ma configuration Paths and Symbols
, j’ai modifié l’ ndk-r8e
pour passer de g ++ 4.6 à 4.7.
Cela semblait briser mon index: je pouvais comstackr mon code, mais Eclipse donnait des erreurs sémantiques, exactement comme dans [ 1 ] et [ 2 ]. Les erreurs proviennent principalement du symbole utilisé par OpenCV4Android, comme distance
, pt
, queryIdx
et trainIdx
.
Lorsque j’ai essayé de sauvegarder dans mon ancienne configuration, l’index était toujours cassé! Je ne peux pas trouver un moyen de changer cela.
trainIdx
apparaissent uniquement dans mon fichier OpenCV4Android dans la section Paths and Symbols
. Paths and Symbols
. J’ai essentiellement essayé de mettre l’inclus OpenCV au début et à la fin. Je suppose que c’est l’ indice CDT à cause de ce qui suit:
ndk-build clean
et ndk-build
. jni
). Field '' could not be resolved.
Le code suivant signale des erreurs en line
, queryIdx
, pt
:
cv::line(mRgb, keypointsA[matches[i].queryIdx].pt, keypointsB[matches[i].trainIdx].pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);
Si je l’écris comme suit, cela fonctionne:
cv::DMatch tmpMatch = matches[i]; cv::KeyPoint queryKp = keypointsA[tmpMatch.queryIdx]; cv::KeyPoint trainKp = keypointsB[tmpMatch.trainIdx]; cv::line(mRgb, queryKp.pt, trainKp.pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);
Ce n’est pas que toutes les fonctions OpenCV ne sont pas résolues: seuls pt
, queryIdx
et trainIdx
sont.
Tout commentaire sera vraiment apprécié.
Dans les préférences de projet que vous avez sélectionnées dans l’environnement Eclipse, accédez à Général C / C ++ -> Analyse de code -> Lancement. Assurez-vous que les deux cases à cocher ne sont pas cochées. Fermez et rouvrez le projet ou redémarrez l’éclipse et reconstruisez le projet.
L’indexation pour le code natif d’Android sur Eclipse étant incomplète, j’ai réussi à activer l’indexation de manière non intuitive dans mes projets NDK, cela devrait fonctionner que vous ndk-build
ou plain make
ou même cmake
. J’utilise Kepler mais ça devrait fonctionner aussi avec les anciennes versions.
Properties
-> C/C++ Build
-> Tool Chain Editor
-> Décochez Display compatible toolchains only
. Current toolchain
d’ Current toolchain
sur Linux GCC
. Android Builder
Current builder
sur Android Builder
si vous utilisez ndk-build
, définissez-le sur Gnu Make Builder
cas contraire (cette étape peut être erronée, désolé si c’est le cas). Properties
-> C/C++ Build
-> Build Variables
-> Assurez-vous que la Build command
lit la commande correcte pour votre projet; si ce n’est pas le cas, décochez Use default build command
et corrigez-la (cela peut être ndk-build
ou make -j5
que vous voulez). Si vous créez le code natif dans un terminal distinct, vous pouvez ignorer cette étape. Exécutez les opérations suivantes (ajustez les parameters à votre guise). Ajoutez sudo
si vous ne disposez pas d’permissions en écriture sur le --install-dir
car le script échoue silencieusement.
./build/tools/make-standalone-toolchain.sh \ --platform=android-14 \ --install-dir=/opt/android-toolchain \ --toolchain=arm-linux-androideabi-4.8
Cela suppose que vous utilisez GNU-STL. Si vous utilisez une autre bibliothèque C / C ++, vous devrez modifier la commande ci-dessus et probablement aussi les chemins d’inclusion dans la commande suivante.
Faites un clic droit sur le projet -> Properties
-> C/C++ General
-> Paths and Symbols
-> Accédez à l’onglet Includes
-> Sélectionnez GNU C++
dans les Languages
-> Cliquez sur Add
et ajoutez les chemins suivants (en supposant que vous avez installé la chaîne d’outils autonome sur /opt/android-toolchain
):
/opt/android-toolchain/include/
/opt/android-toolchain/include/c++/4.8/
/opt/android-toolchain/include/c++/4.8/arm-linux-androideabi/
/opt/android-toolchain/lib/gcc/arm-linux-androideabi/4.8/include/
/opt/android-toolchain/include/c++/4.8/backward/
/opt/android-toolchain/lib/gcc/arm-linux-androideabi/4.8/include-fixed/
/opt/android-toolchain/sysroot/usr/include/
Ici, vous pouvez append chaque chemin d’inclusion souhaité. En fait, j’ai mon OpenCV construit pour Android et installé dans la chaîne d’outils autonome, donc j’ai les éléments suivants:
/opt/android-toolchain/sysroot/usr/share/opencv/sdk/native/jni/include/
Maintenant, l’indexation devrait fonctionner. Vous devriez également pouvoir exécuter ndk-build
(ou make
si c’est votre méthode de construction), puis déployer votre projet sur votre appareil dans Eclipse.
Le développement natif Android sur Eclipse est incomplet car l’indexation ne fonctionne pas immédiatement. Cela est dû à la nécessité de prendre en charge plusieurs architectures (ARMv7, Intel, etc.), plusieurs options STL, plusieurs versions Android, etc. C’est pourquoi ndk-build
et la structure NDK reposent sur des ndk-build
nues. le développement est très impur et peu de projets Android natifs de grand volume existent.
Un grand projet Android est OpenCV où il a fallu développer un script CMake de 1500 lignes pour le comstackr correctement pour Android. À un moment donné, ils ont essayé d’exporter ce script en tant que système de génération basé sur CMake pour Android, mais il n’a pas pu suivre les changements du système NDK et a été abandonné. Ce support aurait dû être à l’intérieur même de NDK.
Le système de construction NDK par défaut aurait dû être une chaîne d’outils autonome, toutes les différentes architectures / bibliothèques C ++ ayant leurs propres chaînes d’outils au désortingment de l’espace de stockage mais avec l’avantage de la propreté, de l’intuitivité et des bonnes pratiques. Ensuite, vous pouvez incorporer tout système de compilation croisée standard qui est également utilisé ailleurs, qui est testé et bien connu, par exemple CMake. Vous pouvez, et à mon avis, vous devriez le faire avec la commande make-standalone-toolchain
du NDK, comme indiqué ci-dessus. Mais au final, ce n’est que mon avis. Si vous vous sentez assez à l’aise avec ndk-build
alors allez-y.
C’est en fait assez difficile de dire quel est le problème. Voici quelques conseils:
hello-jni
(il se trouve dans le dossier samples
jni
). S’il fonctionne sans problème, le problème est lié à la liaison d’OpenCV à votre projet. android-ndk
dans les project properties -> c/c++ build -> environment
. Voici un lien vers le problème Problème avec le projet de construction Android NDK . ndk-build -B
), supprimer toutes les erreurs dans Eclipse manuellement (dans la vue Problems
sélectionnez toutes les erreurs et cliquez simplement sur supprimer ) et essayez d’exécuter le projet maintenant. Parfois, ce “hack” m’aide à exécuter un projet. path-to-your-workspace/.metadata/.plugins/org.eclipse.cdt.core
(sauvegardez-le d’abord). Allez dans Préférences> C / C ++> Mappage de langue> AJOUTER (Source C Fichier et sélectionnez GNU C) Faites la même chose pour C ++
J’ai eu le même problème. J’avais tout le programme d’installation des chemins inclus, mais après avoir ouvert le fichier .c / .cpp ou .h, il commencerait à marquer tout comme «non résolu».
Cela a fonctionné pour moi …
Aller à:
PRÉFÉRENCES -> C / C ++ -> INDEXER
Vérifiez la source d’index et les fichiers d’en-tête ouverts dans l’éditeur .
J’ai eu le même problème, comme beaucoup de gens.
J’ai suivi les étapes dans le post Ayberk Özgür, qui a du sens. Bien que je devais également veiller à inclure des éléments dans les trois langues: GNU C, GNU C ++ et Assembly. Probablement parce que je n’utilise pas une chaîne d’outils autonome.
Au début, je n’incluais que les langages GNU C et GNU C ++. Ce qui m’a laissé encore avec le non résolu inclut l’erreur. Ce n’est que lorsque mes erreurs ont été assignées dans la langue de l’assembleur que mes erreurs ont disparu.
Je ne sais pas pourquoi eclipse ne cherche qu’à travers l’assembleur inclus dans mon projet. Je ne sais pas non plus comment cette partie de la solution fonctionnera pour des projets plus complexes et plus complexes.
J’espère que cela t’aides.
J’ai eu la même situation avec Eclipse CDT travaillant avec la bibliothèque OpenCV. J’ai reçu plusieurs messages d’erreur pendant que le programme compilait correctement. J’ai changé le paramètre de l’indexeur dans la fenêtre “window-> preferences-> Indexer” “construire la configuration de l’indexeur” pour “Utiliser la configuration active” qui a résolu mon problème.
Je viens de passer environ 3h à me cogner la tête contre ce problème d’indexation d’Eclipse NDK! ..
Qu’est-ce qui fait que cela fonctionne: assurez-vous que vous avez une seule architecture cpu spécifiée dans votre fichier Application.mk.
Sinon, le fichier .metadata / .plugins / com.android.ide.eclipse.ndk / *. PathInfo ne sera pas généré par la version NDK. Ce fichier contient des valeurs intégrées de Projet -> Propriétés -> Général C / C ++ -> Chemins et symboles -> Comprend (le simple fait de créer un fichier .pathInfo ne résout pas le problème)