ПРИМЕЧАНИЕ: это, по-видимому, повторяющийся вопрос о StackOverflow, но - для того, что я видел - либо люди никогда не находят пути, либо их решение не работает для меня
Проблема:
Я использую Eclipse Juno ADT. Все работало нормально, пока я не попытался обновить NDK. Я заменил мою папку ndk
(которая была ndk-r8d
) новой версией (т.е. ndk-r8e
), а в моей конфигурации Paths and Symbols
я изменил входящие значения, начиная с g++ 4.6 до 4.7.
Казалось, что я разбил свой индекс: Я мог скомпилировать свой код, но Eclipse давал семантические ошибки, как в [1] и [ 2]. Ошибки в основном происходят из символа, используемого OpenCV4Android, например distance
, pt
, queryIdx
и trainIdx
.
Когда я попытался сделать резервную копию старой конфигурации, индекс все еще был сломан! Я не могу найти способ изменить это.
Что я пробовал
- Очистить проект
- Перестроить, обновить и все другие параметры в подменю "Индекс" (при щелчке правой кнопкой мыши по проекту)
- Отключить/включить индекс в настройках
- Убедитесь, что символы, такие как
trainIdx
отображаются только в моем OpenCV4Android, включают в разделPaths and Symbols
. - Измените порядок моих включений в разделе
Paths and Symbols
. Я в основном пытался включить OpenCV в начале и в конце.
Некоторые наблюдения
Что не работает
Я предполагаю, что это индекс CDT из-за следующего:
- В командной строке я могу построить свой проект с помощью
ndk-build clean
иndk-build
. - Когда я запускаю Eclipse, у меня нет ошибки, пока я не открою файл С++ (из папки
jni
). - Я всегда могу создать проект, но до тех пор, пока я открыл файл С++, я больше не могу запускать приложение из-за большого количества
Field '<name>' could not be resolved.
- Если я не открываю файлы С++, Eclipse не сообщает об ошибке и может успешно создавать и развертывать приложение Android.
Интересный факт
Следующий код сообщает об ошибках в 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);
Если я напишу его следующим образом, он работает:
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);
Не все функции OpenCV не решены: только pt
, queryIdx
и trainIdx
.
Любые комментарии будут действительно оценены.