error “símbolo externo no resuelto” al vincular con OpenCV 3.0

Construyo OpenCV 3.0 desde la fuente. Y con el informe de contribuciones para algunos módulos adicionales. Y configuro manualmente mi proyecto VS2013 para usar los archivos lib generados.

Mi código es simple por ahora:

#include "opencv2\core\core.hpp" #include "opencv2\imgcodecs\imgcodecs.hpp" int _tmain(int argc, _TCHAR* argv[]) { cv::Mat image = cv::imread("img.jpg"); return 0; } 

Pero me dio estos errores cuando en la versión de la comunidad VS 2013:

enter image description here

Veo un hilo similar , dicen que es causado por el problema x86 / x64. Pero mi proyecto ya es x86. Y el OpenCV que construí también se dirige a x86 (ver a continuación). ¿Qué razón podría ser?

enter image description here

ADD 1

El proyecto OpenCV 3.0 INSTALL genera el siguiente directorio lib:

Entonces es de hecho uno x86 .

enter image description here

Mi ruta lib está configurada a la ruta anterior:

enter image description here

Y agregué todos los archivos *d.lib .

enter image description here

Y debajo está el Configuration Manager mi proyecto VC

enter image description here

Entonces es de hecho x86 también.

¿Dónde podría estar mal?

ADD 2

Busqué manualmente la función fastFree() . Se define en el archivo opencv_core300d.lib . Uso el dumpbin /symbols para verificar los símbolos. Y me parece que su nombre está destrozado exactamente como fastFree@cv@@YAXPAX@Z Entonces, ¿por qué no se puede encontrar?

Aquí los pasos para usar OpenCV 3.0.0 con libs precomstackdos, para un proyecto de C ++ que vincula a OpenCV estáticamente, en Windows (probado con Windows 8.1) y Visual Studio (probado con Visual Studio 2013) para ejecutar este progtwig:

 #include  using namespace cv; int main() { Mat3b img = imread("path_to_image"); imshow("img", img); waitKey(); return 0; } 
  1. Descargar de http://opencv.org/downloads.html
  2. Extraer
  3. Llamemos a OPENCV_DIR el directorio que contiene:
    • construir
    • fuente
  4. Crea un proyecto vacío:
    • Nuevo proyecto -> Visual C ++ -> Proyecto vacío
  5. Agregue un archivo cpp (digamos Start.cpp) que contendrá su función principal (por ejemplo, el fragmento de arriba)
  6. DEPURACIÓN de configuración
  7. Agregar directorios include y lib:
    • Propiedades de configuración -> Directorios de VC ++
    • Incluir directorios: agregar OPENCV_DIR \ build \ include
    • Directorios de biblioteca: agregar OPENCV_DIR \ build \ x86 \ vc12 \ staticlib
  8. Agregue las librerías requeridas (las siguientes son buenas para este ejemplo simple, debe agregar más si necesita otras funcionalidades):

    • opencv_core300d.lib
    • opencv_highgui300d.lib
    • opencv_imgproc300d.lib
    • opencv_hal300d.lib
    • opencv_imgcodecs300d.lib
    • libjpegd.lib;
    • libpngd.lib
    • libjasperd.lib
    • IlmImfd.lib
    • libtiffd.lib
    • libwebpd.lib
    • zlibd.lib
    • ippicvmt.lib
    • %(Dependencias adicionales)
  9. Propiedades de configuración -> C / C ++ -> Generación de código -> Biblioteca de tiempo de ejecución

    • Establecer en Depuración multiproceso (/ MTd)
  10. Para una comstackción RELEASE, debe realizar los pasos del 6 al 9 en el modo de lanzamiento, agregando libs sin la “d” final en el paso 8, y el Multi thread (/ MT) en el paso 9.

  11. ¡Disfrutar!

Como beneficio adicional, también recomiendo instalar la extensión de Image Watch para Visual Studio. ¡Muy, muy útil para depurar tus Mat s!

Obviamente estás vinculando libs que no coinciden. Dependiendo de su configuración, cambie su proyecto en 64 bit por ‘ Project Properties -> Configuration Manager ‘, o cambie su ruta de acceso lib para apuntar a librerías x86. (Por cierto, dado que soy un nuevo usuario, no puedo comentar, así que tengo que escribirlo como respuesta aquí)