Вопрос по eclipse, android – Как исправить ошибку Eclipse CDT «Функция« isdigit »не может быть решена» с Android NDK?

6

Я использую Eclipse Indigo со смешанным проектом Android / NDK. Я добавил природу C ++, и почти все работает. Автоматическая сборка работы; то есть, когда я редактирую файл, ndk-build вызывается и успешно завершается - никаких ошибок сборки. Помогает наведение кода при наведении курсора (всплывает небольшое окно с информацией о функции). Если я наведу курсор на строку включения и нажму F3, откроется соответствующий файл заголовка (не тот, который я ожидал бы исходя из моей конфигурации, а соответствующий - возможно, подсказка?).

Если я выберу следующую строку в моем файле .cpp, он откроет $ NDKROOT / platform / android-3 / arch-arm / usr / include / ctype.h:

#include <ctype.h>

(isdigit определен в этом файле)

Однако Eclipse настаивает на том, что isdigit не определен. Я читал много постов, в которых предполагалось, что виноват статический анализатор или индексатор, но я пробовал многие из предложенных решений, но безрезультатно.

Если я добавлю строку, подобную следующей, ошибка исчезнет, и вспомогательный код при наведении курсора на функцию сработает:

extern int isdigit(int);

Опять же, это не ошибка компоновщика или ошибка компилятора - ndk-build завершается без ошибок. Это что-то внутри затмения. Спасибо, что посмотрели!

Изменить: теперь я считаю, что это проблема анализа кода. Лучшее решение состоит в том, чтобы отредактировать параметры анализа кода, чтобы сделать функцию «не может быть решена». быть предупреждением вместо ошибки. Таким образом, вы можете видеть предупреждения в окне «Проблемы», но продолжать работать. Если функция ДЕЙСТВИТЕЛЬНО отсутствует, компилятор скажет вам! У меня также есть новая теория, что проблема заключается в том, что Code Analyzer следует по символическим ссылкам, потому что все «отсутствующие» отсутствуют. функции находятся в символических файлах включения. Хотелось бы любой вклад в эту теорию.

Я предполагаю, что это будет исправлено в Кеплере? james82345

Ваш Ответ

5   ответов
0

проекту в index Explorer & gt; rebuild) Иногда это решает проблему ... Если вы обновили более раннюю версию Eclipse, ваши настройки индексатора могут быть проблемой - вы можете попытаться восстановить значения по умолчанию для индексатора (предпочтения c / c ++ Indexer) ... Надеюсь, это поможет и # x2013; эта проблема может быть «сводящей с ума» (кажется, часто бывает)

Спасибо за предложение - к сожалению, я ранее пытался пересоздать индекс. Я также сделал несколько изменений в настройках индексатора (ни один из которых не помог), а затем восстановил настройки по умолчанию (все еще не радует). ajh158
2

предложенного в своем вопросе, и пока не смог найти лучшего способа.

0

же самый простой код на C ++ (например, созданный мастерами приветствия) будет иметь синтаксические ошибки без каких-либо проблем со сборкой. Как указывалось в другом сообщении Thorbjorn Jemander, проблема заключается в индексаторе, и ее можно устранить, сняв флажок «Разрешить эвристическое возобновление включений». Точно: Winsow - & gt; Настройки - & gt; C / C ++ - & gt; Индексатор - & gt; отмените выбор вышеупомянутой опции.

После этого вы можете увидеть, что выделенные ошибки исчезают после того, как вы откроете файл в редакторе и просто щелкните на странице редактора ...

Марчелло, спасибо за ваш ответ. К сожалению, это не помогло с проблемой isdigit, которую я имею. ajh158
2

Go to Project > Properties Navigate to C/C++ Build > Settings Go to GCC C Linker > Miscellaneous settings Add the following in the Linker flags : -lc
Тяньи, спасибо за ваш ответ. К сожалению, это не помогло с моей проблемой. Я думаю, что моя проблема вызвана анализом кода CDT - влияют ли настройки компоновщика на анализ кода CDT? В любом случае спасибо! ajh158
& quot; настройки компоновщика влияют на анализ кода CDT? & quot; Извините, что я не очень хорошо знаю их отношения ...
5

работая над такими проблемами, я разработал следующий рецепт для решения проблем.

Я надеюсь, что это поможет вам или другим:

Summary: Usually, your problems in eclipse are due to eclipse configuration problems. The following assumes that your C++ code is building ok with ndk_build or ndk_build.cmd (on windows).

No joy with eclipse juno (4.2) and CDT version 8.1. Use eclipse indigo (3.7)

Make sure that you have the CDT for indigo installed and enabled (version 8.0X) by looking in the "install new software". It defaults to installed but not enabled on indigo on some downloads.

When you are dealing with native code or android config for native code, make sure you are in the C++/C perspective in eclipse, not the java one. It is deceptive, but there is a only a subset of options available in Java perspective. You can be sure you are C++/C perspective if you see "C/C++ general" as a choice when you do "Project > Properties."

The usual problem is that the indexer in C/C++-land thinks there are errors when there is not (e.g. building with ndk-build works ok, often you can see this in the console window even). This is caused by bad paths in the "Paths And Symbols" part of "Project > Properties > C/C++ General" on the first tab.

To fix the problem, the primary tool is to right-click on the project, select "Index" and "Search for unresolved includes." This will tell what files it can't find--and these are typically not the ones that you have in your files with the little pink mark by them.

To find the right file, search in your NDKROOT directory (where you installed NDK). A typical one to add is: ${NDKROOT}/platforms/android-9/arch-arm/usr/include or the right android-N for your android target. There are many copies of the standard include directories in the NDK because of multiple versions of android and copies of the C++ standard libraries.

Two big warnings

The "unresolved includes" view in eclipse does not automatically update when you change the indexer configuration on the Properties > C/C++ General/Paths and Settings so be sure to run it again each time. Most views in eclipse do this update properly!

Also the little red/pink error markers in the source code views in the eclipse editor don't automatically update either. You have to "touch" the file in some way for it discover that the error is now fixed.

Если вы выходите из затмения и возвращаетесь иногда, ему удается «забыть» Конфигурация, которую вы установили. Я обнаружил, что удаление включаемого пути (пути и символы), а затем его замена (с помощью «Применить» оба раза), кажется, убеждает его запомнить.
Спасибо за подробный ответ, Ян. Я дал вам голос за полезную информацию, но это не помогло мне. ctype.h определяет isdigit и является разрешенным включением, но isdigit остается неопределенным. Я также пробовал различные приемы (включая удаление, применение, добавление, применение, которое вы упомянули), но безрезультатно. ajh158

Похожие вопросы