NOTE: c'est apparemment une question récurrente sur StackOverflow, mais - pour ce que j'ai vu - les gens ne trouvent jamais de solution ou la 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
(c'était le ndk-r8d
) par la nouvelle version (c'est-à-dire ndk-r8e
) et, dans ma configuration Paths and Symbols
, j'ai changé l'inclus pour passer de g ++ 4.6 à 4.7.
Cela semblait casser mon index: je pouvais compiler mon code, mais Eclipse donnait des erreurs sémantiques, exactement comme dans [ 1 ] et [ 2 ]. Les erreurs principalement proviennent du symbole utilisé par OpenCV4Android, tel que distance
, pt
, queryIdx
et trainIdx
.
Quand j'ai essayé de sauvegarder sur mon ancienne configuration, l'index était toujours cassé! Je ne peux pas trouver un moyen de changer cela.
trainIdx
apparaissent uniquement dans mon OpenCV4Android inclus dans la section Paths and Symbols
.Paths and Symbols
. J'ai essentiellement essayé de mettre OpenCV include au début et à la fin.Je suppose que c'est l'indice CDT à cause des éléments suivants:
ndk-build clean
et ndk-build
.jni
).Field '<name>' could not be resolved.
Le code suivant signale des erreurs sur 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);
Toutes les fonctions OpenCV ne sont pas non résolues: seuls pt
, queryIdx
et trainIdx
sont.
Tout commentaire sera vraiment apprécié.
Dans les préférences de projet sélectionnées dans l'environnement Eclipse, accédez à C/C++ Général -> Analyse de code -> Lancement. Assurez-vous que les deux cases à cocher ne sont pas cochées. Fermez et rouvrez le projet ou redémarrez Eclipse et reconstruisez le projet.
Étant donné que l'indexation du code natif Android sur Eclipse est incomplète, j'ai réussi à activer l'indexation dans mes projets NDK de la manière non intuitive suivante. Cela devrait fonctionner si vous utilisez ndk-build
ou plain make
ou même cmake
. J'utilise Kepler mais cela devrait aussi fonctionner avec les anciennes versions.
Properties
-> C/C++ Build
-> Tool Chain Editor
-> Décochez Display compatible toolchains only
.Current toolchain
sur Linux GCC
.Current builder
sur Android Builder
si vous utilisez ndk-build
, définissez-le sur Gnu Make Builder
sinon (cette étape peut être fausse, veuillez nous excuser par avance si tel est le cas).Properties
-> C/C++ Build
-> Build Variables
-> Assurez-vous que Build command
lit la commande correcte pour votre projet; si ce n'est pas le cas, décochez Use default build command
et corrigez-le (il peut s'agir du ndk-build
ou du make -j5
que vous souhaitez). Si vous construisez le code natif dans un terminal séparé, vous pouvez ignorer cette étape.Exécutez ce qui suit (Modifiez les paramètres selon vos préférences). Ajoutez Sudo
si vous n'avez pas les autorisations d'écriture sur --install-dir
car le script échoue en mode silencieux.
./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 également les chemins d'inclusion dans la commande suivante.
Cliquez avec le bouton droit sur le projet -> Properties
-> C/C++ General
-> Paths and Symbols
-> Accédez à l'onglet Includes
-> Sélectionnez GNU C++
dans Languages
-> cliquez sur Add
et ajoutez les chemins suivants (en supposant que vous ayez installé la chaîne d'outils autonome pour /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 ajouter tous les chemins d'inclusion de votre choix. En fait, mon OpenCV est conçu pour Android et installé dans la chaîne d’outils autonome.
/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 génération), puis déployer votre projet sur votre périphérique dans Eclipse.
Le développement natif d'Android sur Eclipse est incomplet car l'indexation ne fonctionne pas immédiatement. Cela est dû au fait qu’il faut prendre en charge plusieurs architectures (ARMv7, Intel, etc.), plusieurs options STL, plusieurs versions d’Android, etc. C’est pourquoi vous avez le ndk-build
nu make
et la structure NDK complète, et c’est aussi pourquoi le développement de NDK est très sale et il existe peu de projets Android natifs à grand volume.
OpenCV est un grand projet Android, où ils ont dû développer un script CMake de 1500 lignes impaires pour le compiler correctement pour Android. À un moment donné, ils ont essayé d'exporter ce script en tant que système de construction basé sur CMake pour Android, mais ne parvenant pas à suivre l'évolution du système NDK, il 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 architectures/bibliothèques C++ différentes ayant leurs propres chaînes d'outils au détriment de l'espace de stockage, mais avec l'avantage de la propreté, de l'intuition et des bonnes pratiques. Vous pouvez ensuite 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 vous devriez, à mon avis, 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
, continuez.
Je suis parti pour docela těžké říct, co je problém. Zde jsou některé rady:
hello-jni
(nachází se ve složce jni
name__samples
name__variable_name__). Définissez les problèmes, vous devez proposer le logiciel OpenCV s vaším projektem.Android-ndk
umístění v project properties -> c/c++ build -> environment
. Problèmes liés Problèmes liés au système Android NDK .ndk-build -B
), cliquez ici pour afficher le code promo de chyby Eclipse (v zobrazení Problems
vyberte všechny chyby v Eclipse)delete) un projet de loi de croissance. Někdy à "pirater" le projet de loi de pomáhá.path-to-your-workspace/.metadata/.plugins/org.Eclipse.cdt.core
(nejprve ji zálohujte).J'ai eu le même problème, comme beaucoup de gens.
J'ai suivi les étapes dans le post Ayberk Özgür, ce qui est logique. Bien que je devais aussi m'assurer de mettre des inclus dans les trois langages: GNU C, GNU C++ et Assembly. Probablement parce que je n'utilise pas une chaîne d'outils autonome.
Au début, mes inclus uniquement sous les langages GNU C et GNU C++. Ce qui m'a laissé toujours avec l'erreur non résolue inclut. Ce n'est que lorsque j'ai assigné mon inclusion dans la langue d'assembleur que mes erreurs ont disparu.
Je ne sais pas pourquoi Eclipse cherche uniquement dans 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 de plus grande taille.
J'espère que cela t'aides.
J'ai eu le même problème. J'avais tous les chemins d'inclusion appropriés, mais après avoir ouvert le fichier .c/.cpp ou .h, il commençait à tout marquer comme "non résolu".
Cela a fonctionné pour moi.
Aller à:
PRÉFÉRENCES -> C/C++ -> INDEXER
Vérifier Indexer les fichiers source et d’en-tête ouverts dans Editor .
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 était compilé correctement. J'ai changé le paramètre d'indexeur dans la boîte "fenêtre-> préférences-> Indexeur" "construire la configuration pour l'indexeur" en "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 Eclipse NDK! ..
Ce qui a 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 génération NDK. Ce fichier contient les valeurs intégrées de Projet -> Propriétés -> Général C/C++ -> Chemins et symboles -> Inclut (le simple fait de créer un fichier .pathInfo ne résout pas le problème)
Allez dans Préférences> C/C++> Mappage de langue> AJOUTER (fichier source C et sélectionnez GNU c). Faites de même pour C++.