37 votos

Eclipse se compila correctamente pero aún así da errores semánticos

NOTA: aparentemente es una cuestión recurrente en StackOverflow, pero - por lo que he visto - que la gente que nunca encontrar una manera o de su solución no funciona para mí

El problema:

Estoy usando Eclipse Juno ADT. Todo estaba funcionando bien hasta que he intentado actualizar el NDK. He sustituido el ndk carpeta (que fue la ndk-r8d) por la nueva versión (es decir, ndk-r8e) y, en mi Paths and Symbols configuración, he cambiado la incluye para ir de g++ 4.6 a 4.7.

Parecía romper mi índice: yo podría compilar mi código, pero Eclipse estaba dando errores semánticos, exactamente igual que en [1] y [2]. Los errores principalmente provienen de símbolo utilizado por OpenCV4Android, tales como distance, pt, queryIdx y trainIdx.

Cuando traté de copia de seguridad de mi configuración anterior, el índice todavía estaba roto! No puedo encontrar una manera de cambiar esto.


Lo que he intentado

  • Limpiar el proyecto
  • Reconstruir, renovar y todas las otras opciones en el "Índice" del submenú (cuando se "haga clic" en el proyecto)
  • Habilitar / deshabilitar el indizador en las preferencias
  • Compruebe que los símbolos tales como trainIdx sólo aparecen en mi OpenCV4Android incluir en la Paths and Symbols sección.
  • Cambiar el orden de mi incluye en la Paths and Symbols sección. Yo, básicamente, se trató de poner en el OpenCV incluir en el comienzo y en el final.

Algunas observaciones

Lo que no está funcionando

Supongo que es el CDT índice debido a lo siguiente:

  • En la línea de comandos, que se puede construir mi proyecto utilizando ndk-build clean y ndk-build.
  • Cuando me inicie Eclipse, yo no tengo ningún error hasta que abra un archivo de C++ (de la jni carpeta).
  • Yo siempre se puede construir el proyecto, pero como me han abierto un archivo de C++, que no se puede ejecutar la aplicación, ya de una gran cantidad de Field '<name>' could not be resolved.
  • Si no me abre los archivos de C++, Eclipse no se informe de cualquier error y puede generar e implementar la aplicación para Android con éxito.

Es interesante el hecho de

El siguiente código informes de errores 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 yo escribir de la siguiente manera, funciona:

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);

No es que todas las funciones de OpenCV están sin resolver: sólo pt, queryIdx y trainIdx .

Cualquier comentario será muy apreciada.

30voto

Alex Cohn Puntos 13248

En su proyecto seleccionado preferencias en el entorno Eclipse, vaya a la C/C++ General -> Análisis de Código -> Ejecutar. Asegúrese de que ambas casillas de verificación está desactivada.

10voto

Ayberk Özgür Puntos 569

Desde la indización de código nativo de Android en Eclipse es incompleta, me las arreglé para permitir la indexación en mi NDK proyectos de la siguiente manera intuitiva, se debe trabajar ya sea que usted use ndk-build o llanura make o, incluso, cmake. Yo estoy usando la Kepler, pero debería funcionar en versiones anteriores también.

Obtener su cadena de herramientas a la derecha

  • Haga clic derecho sobre el proyecto -> Properties -> C/C++ Build -> Tool Chain Editor -> Desmarcar Display compatible toolchains only.
  • En la misma ventana, establezca Current toolchain a Linux GCC.
  • En la misma ventana, establezca Current builder a Android Builder si utilizas ndk-build, establecido a Gnu Make Builder otro (este paso puede estar equivocado, lo siento de antemano si es que).
  • Haga clic derecho sobre el proyecto -> Properties -> C/C++ Build -> Build Variables -> asegúrese Build command lee el comando correcto para tu proyecto; si no, desactive Use default build command y correcta (puede ser ndk-build o make -j5 que desea). Si se construye el código nativo en una terminal separada, puede omitir este paso.

Hacer una independiente de las herramientas, es probablemente la forma más limpia para obtener STL fuentes en un solo lugar

  • Ir a la NDK directorio raíz.
  • Ejecute el siguiente (ajustar la configuración de acuerdo a su gusto). Agregar sudo si usted no tiene permisos de escritura a la --install-dir porque el guión falla en silencio.

        ./build/tools/make-standalone-toolchain.sh \
            --platform=android-14 \
            --install-dir=/opt/android-toolchain \
            --toolchain=arm-linux-androideabi-4.8
    
  • Esto es suponiendo que usted use GNU-STL. Si utiliza otro C/C++ biblioteca, usted tendrá que ajustar el comando de arriba, y probablemente también la incluyen rutas de acceso en el siguiente comando.

Añadir el necesario incluir rutas de acceso al proyecto

  • Haga clic derecho sobre el proyecto -> Properties -> C/C++ General -> Paths and Symbols -> Ir a la Includes tab -> Seleccione GNU C++ de Languages -> haga Clic en Add y agregar las siguientes rutas de acceso (suponiendo que hayas instalado la aplicación independiente de las herramientas a /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/
  • Aquí, usted puede agregar cada una de incluir la ruta de acceso que desee. De hecho, tengo mi OpenCV construido para Android e instalado en el independiente de las herramientas, así que tengo el siguiente incluir allí:

    • /opt/android-toolchain/sysroot/usr/share/opencv/sdk/native/jni/include/

Ahora, la indización debe trabajar. También debe ser capaz de ejecutar ndk-build (o make si ese es su método de construcción) y, a continuación, implementar el proyecto para su dispositivo dentro de Eclipse.

Por qué?

Android nativa de desarrollo en Eclipse es incompleto ya que la indexación no funciona fuera de la caja. Esto es debido a la necesidad de apoyo de múltiples arquitecturas (ARMv7, Intel, etc.), varios STL opciones, varias versiones de Android etc. Esta es la razón por la que disponen del mínimo make base ndk-build y todo el NDK de la estructura, y esta es también la razón por NDK el desarrollo es muy sucio y algunos de gran volumen nativa de Android proyectos de existir.

Un gran proyecto Android es OpenCV donde tuvieron que desarrollar un 1500 impar línea de CMake secuencia de comandos para que se compile para Android correctamente. En algún momento, se trató de exportar la secuencia de comandos como un CMake basado en el sistema de compilación de Android, pero no podía mantenerse con los cambios en el NDK sistema y fue abandonado. Este apoyo debería haber estado en el interior de NDK sí mismo.

El valor predeterminado NDK sistema de compilación debería haber sido independiente de las herramientas, con todos sus diferentes arquitecturas/C++ bibliotecas de tener su propio toolchains en el costo de espacio de almacenamiento, pero con la ventaja de la limpieza, la intuición y la buena práctica. Entonces usted puede incorporar cualquier estándar de sistema de compilación cruzada, que también se utiliza en otros lugares, está probado y es bien conocido, e.g CMake. Usted puede, y en mi opinión deberían hacer que con el NDK de la make-standalone-toolchain comando como se muestra arriba. Pero en fin, esta es sólo mi opinión. Si usted se siente lo suficientemente cómodo con ndk-build , a continuación, seguir adelante.

6voto

ArtemStorozhuk Puntos 6359

En realidad es muy difícil decir cuál es el problema. Aquí están algunos consejos:

  1. Trate de importación y construir hello-jni (se encuentra en jni's samples carpeta). Si se ejecuta sin problemas que el problema es con la vinculación de OpenCV para su proyecto.
  2. Parece que se olvidó de actualizar android-ndk ubicación en project properties -> c/c++ build -> environment. Aquí el enlace a la resolución de Problema con la compilación de Android NDK proyecto.
  3. Construir desde la consola de tu proyecto (ndk-build -B), eliminar todos los errores en el Eclipse de forma manual (en Problems ver seleccionar todos los errores y simplemente haga clic en eliminar) y vuelva a ejecutar el proyecto ahora. A veces este "hack" me ayuda a ejecutar el proyecto.
  4. Cerca de Eclipse y eliminar la carpeta path-to-your-workspace/.metadata/.plugins/org.eclipse.cdt.core (copia de seguridad primero).

0voto

user3163532 Puntos 1

Vaya a Preferencias > C/C++ > Idioma Mapping > ADD (Fuente C Archivo y seleccione GNU C) Hacer lo mismo para C++

0voto

Pescolly Puntos 26

Yo tenía el mismo problema. Yo tenía todo el apropiado incluir rutas de instalación, pero después de la apertura de la .c/.cpp o .h archivo y que podría comenzar a marcar todo como "sin resolver."
Esto funcionó para mí...
Ir a:
PREFERENCIAS -> C/C++ -> INDIZADOR
De verificación Índice de la Fuente Y los Archivos de Cabecera Abierto en el Editor.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X