2012-05-13 12 views
8

estoy tratando de establecer OpenCV 2.4 de la siguiente manera:¿Cómo usar las bibliotecas estáticas de OpenCV 2.4 con Visual Studio?

  • que he descargado y extraído el paquete precompilado a C:\OpenCV240.
  • En Visual Studio, he agregado C:\OpenCV240\build\include como un directorio de inclusión adicional.
  • Además, he agregado C:\OpenCV240\build\x86\vc10\staticlib como un directorio de biblioteca adicional.
  • Y he especificado todos los archivos .lib disponibles como dependencias adicionales.

Cuando puedo compilar mi programa "Hello World" (que recoge muy bien cuando se utiliza el DLL), aparece un mensaje de error muy parecido a esto:

1> MSVCPRTD.lib (MSVCP100D.dll): error LNK2005: "público: __thiscall std :: _ Container_base12 :: ~ _Container_base12 (void)" (?? 1_Container_base12 @ std @@ QAE @ XZ) ya definido en opencv_core240d.lib (matrix.obj)

¿Qué estoy haciendo mal?

Respuesta

10

Parece que necesita especificar un enlace contra la biblioteca de tiempo de ejecución C estática en su programa.

Si OpenCV se vincula con el CRT estático y utiliza el dinámico, obtiene estos tipos de errores de redefinición.

Para cambiar esta configuración, abra las Propiedades de su proyecto y vaya a Configuration Properties -> C/C++ -> Code Generation.

Cambie Runtime Library de Multi-threaded Debug DLL (/MDd) a Multi-threaded Debug (/MTd). Haga lo mismo para sus otras configuraciones, usando la variante que no es Debug donde corresponda.

+0

¿Esto tiene algún efecto secundario o es seguro hacerlo? – Niko

+1

Es seguro hacerlo, de hecho, * necesita * tener todas las bibliotecas vinculadas utilizando la misma versión del CRT. Sin embargo, la decisión de si desea usar bibliotecas estáticas vs dinámicas no siempre es fácil. – Fraser

Cuestiones relacionadas