Errores de enlace después de actualizar Xcode a 4.5.2 y OpenCV a 2.4.3

Mi proyecto funcionó bien hasta esta mañana. Estaba usando xcode 4.3, y una versión anterior de OpenCV (no estoy seguro acerca de la versión exacta). OSX ya era 10.7.x, pero no 10.7.5

Hoy, después de actualizar OSX a 10.7.5, xcode a 4.5.2 y download OpenCV 2.4.3, obtengo los siguientes errores de linker al intentar build el proyecto:

Símbolos no definidos para la architecture armv7:
"_OBJC_CLASS _ $ _ ALAssetsLibrary", a la que se hace reference desde:
objc-class-ref en opencv2 (cap_ios_video_camera.o)
"cv :: FeatureDetector :: create (std :: string const &)", referencedo de:
– [ImageAnalyzer detectBlobs:] en ImageAnalyzer.o
"cv :: FeatureDetector :: detect (cv :: Mat const &, std :: vector> &, cv :: Mat const &) const", referencedo de:
– [ImageAnalyzer detectBlobs:] en ImageAnalyzer.o
ld: símbolo (s) no encontrado para la architecture armv7
clang: error: el command linker falló con el código de salida 1 (use -v para ver la invocación)

Para usar el nuevo marco opencv, eliminé la reference al marco antiguo y hice reference al proyecto al file oficial opencv2.framework descargado desde aquí .
También eliminé la reference a libz.dylib , y agregué una reference a libc ++. Dylib en su lugar.
El último paso fue actualizar el file de prefijo al nuevo marco. La parte relevante en el file de prefijo ahora se ve así:

#ifdef __cplusplus #import <opencv2/opencv.hpp> #endif 

Todo se networkingujo a estos 4 errores de linker de los que parece que no puedo deshacerme. Intenté usar libstdc ++. Dylib , pero estoy recibiendo aún más errores. También traté de build OpenCV yo mismo como se explica aquí , pero todavía estoy recibiendo los mismos errores que el marco pnetworkingefinido.

¿Qué me perdí? ¿Hay algo más que necesite cambiar en mi proyecto?

ACTUALIZAR:
Como se ve aquí , establecer la "biblioteca estándar de C ++" en "libc ++ (libray estándar de LLVM C ++ con compatibilidad con C ++ 11" produjo solo un error:

clang: error: destino de implementación no válido para -stdlib = libc ++ (requiere iOS 5.0 o posterior)

Cambiar el destino de implementación a iOS 5 finalmente hizo que mi proyecto se ejecutara nuevamente.
¿Esto significa que OpenCV 2.4.3 no funciona en versiones de iOS anteriores a 5?

pasos para comstackr y ejecutar c ++ opencv 2.4.4 en mac os x lion 10.7.5 con cmake 2.8.10 y xcode 4.6.1

Tener las herramientas correctas

  1. descargue opencv-unix desde http://sourceforge.net/projects/opencvlibrary/files/ y envíelo donde sea
  2. descargue cmake .dmg de http://www.cmake.org/cmake/resources/software.html e instálelo
  3. Estoy asumiendo que tienes xcode 4.6 en os x lion que incluye el ios sdk 6.1
  4. vaya a las preferences de xcode para download e instalar las Herramientas de línea de command para que tenga g ++, etc.

Use cmake para comstackr opencv

  1. vaya a la carpeta opencv extraída
  2. crear un directory de compilation

     mkdir build cd build cmake -D WITH_TBB=OFF -D BUILD_NEW_PYTHON_SUPPORT=OFF -D BUILD_FAT_JAVA_LIB=OFF -D BUILD_TBB=OFF -D BUILD_EXAMPLES=ON -D CMAKE_CXX_COMPILER=g++ CMAKE_CC_COMPILER=gcc -D CMAKE_OSX_ARCHITECTURES=x86_64 -D BUILD_opencv_java=OFF -G "Unix Makefiles" .. make -j8 sudo make install 
  3. desde la carpeta de compilation, vaya a bin / y ejecute una de las testings

     ./opencv_test_stitching 

Cree su propio proyecto c ++ opencv xcode

  1. enciende xcode y crea un nuevo proyecto xcode
  2. select la herramienta de command-line para el tipo de proyecto bajo os x
  3. abrir la configuration de compilation de tu proyecto
  4. bajo Arquitecturas, establezca Arquitectura en Intel de 64 bits. también establezca Arquitecturas válidas para x86_64
  5. en Opciones de compilation, configure Comstackdor para C / C ++ en Comstackdor pnetworkingeterminado
  6. en Rutas de búsqueda, establezca las routes de búsqueda de encabezado en / usr / local / include
  7. también en Rutas de búsqueda, establezca Rutas de búsqueda de biblioteca en / usr / local / lib
  8. en el comstackdor 4.2 de LLVM de Apple: biblioteca estándar de C ++ en libstd ++ (para OpenCV 2.4.6, Xcode 5, LLVM 5.0 y 10.8.5, establezca el dialecto de idioma y la biblioteca estándar en "Compiler Default" en lugar de "libstd ++")

Agregue las bibliotecas compencv opencv a su proyecto

  1. vaya a la pestaña Crear Fases junto a la pestaña Configuraciones de Generación en la que estuvo
  2. dentro del enlace Binario con bibliotecas, click el signo + y elija Agregar otro
  3. presione la barra frontal / en su keyboard e ingrese / usr / local / lib
  4. presiona ingresar y selecciona las bibliotecas que deseas usar en tu proyecto
  5. asegúrate de seleccionar siempre libopencv_core.2.4.4.dylib
  6. presiona enter y verás los dylibs seleccionados bajo tu proyecto

escribe un código

  1. Primero, organice los files, haga clic derecho en el ícono del proyecto y select Nuevo grupo
  2. nombra el nuevo grupo opencv o lo que sea
  3. arrastre los dylibs y suéltelos en ese grupo
  4. abrir main.cpp
  5. Copie el código de cualquiera de las testings de muestra que viene con opencv y péguelo aquí.
  6. asegúrese de agregar todos los dylibs necesarios, por ejemplo, si copió el código opencv_test_stitching.cpp en main.cpp, necesitará agregar las siguientes bibliotecas en los pasos anteriores libopencv_core.2.4.4.dylib libopencv_highgui.2.4.4. dylib libopencv_stitching.2.4.4.dylib

Aclamaciones.

Parece que su proyecto falta el framework AssetsLibrary .

  1. Seleccione el nodo superior en el browser del proyecto. (Aparece la página del proyecto y los objectives con la configuration de compilation).

  2. Seleccione el objective.

  3. Seleccione Resumen .

  4. Desplácese hasta Frameworks y bibliotecas vinculadas .

  5. Haga clic en el icono de más al final de la tabla y select AssetsLibrary.framework .

  6. Haga clic en Agregar .

Luego intente comstackrlo nuevamente.

Como parece que no puedo get una respuesta con respecto a las versiones (ni aquí ni en el sitio de preguntas y respuestas de OpenCV), voy a publicar esto como una respuesta, ya que al less resolvió el problema. Esto se describe aquí .

En la configuration de compilation de su proyecto, vaya a la sección comstackdor Apple LLVM 4.1-Language .
Ahí:
Establecer el dialecto de lenguaje C ++ en el comstackdor por defecto
Establezca C ++ Libray estándar en libc ++ (libray estándar C ++ de LLVM con compatibilidad con C ++ 11

Después de hacer lo anterior, dejé de get esos errores de linker, y solo obtuve un error, que indicó que solo se admite iOS 5 y superior. Cambiar el objective de implementación a 5.0 en el verano del proyecto hizo el truco.

En una nota final, todavía no estoy seguro de lo que significa, con respecto a la compatibilidad de OpenCV 2.4.3 con las versiones de iOS anteriores a 5.

clang: error: destino de implementación no válido para -stdlib = libc ++ (requiere iOS 5.0 o posterior) para eliminar este error.

GoTo BuildSettings. Establezca la biblioteca estándar c ++ en el valor pnetworkingeterminado del comstackdor. El error se eliminará seguramente.

Solo para lograr esto en las publicaciones en alguna parte en caso de que alguien más se encuentre con lo mismo. Si sigues todos los excelentes consejos que incluyen la biblioteca apropiada de c ++ para vincular en contra de la construcción de una aplicación para iOS, PERO todavía obtienes los errores de enlace para símbolos no definidos, ¡asegúrate de que tus files de código estén configurados para comstackr como c ++! Es cambiar el nombre de su .m a .mm y .h a .hpp. Son las cosas pequeñas…

En lugar de utilizar los commands de terminal que figuran en la guía de installation de opencv en el website oficial, use los siguientes commands para build opencv desde la terminal. Trabajó para mí

cd OpenCV-2.3.1

mkdir build

construcción de cd

cmake -G "Unix Makefiles" ..

hacer

sudo make install

  1. Go Xcode / General / Linked Frameworks and Bibliotecas
  2. Presione el button "+"
  3. tipo: AssetsLibrary
  4. Seleccione "AssetsLibrary.framework" e impórtelo

Hecho

¡Buena suerte!