error ''símbolo externo no resuelto'' al vincular con OpenCV 3.0
visual-c++ opencv3.0 (1)
Aquí los pasos para usar OpenCV 3.0.0 con bibliotecas precompiladas, para un proyecto C ++ que vincula estáticamente a OpenCV, en Windows (probado con Windows 8.1) y Visual Studio (probado con Visual Studio 2013) para ejecutar este programa:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat3b img = imread("path_to_image");
imshow("img", img);
waitKey();
return 0;
}
- Descargar desde http://opencv.org/downloads.html
- Extraer
-
Llamemos a OPENCV_DIR el directorio que contiene:
- construir
- fuente
-
Crea un proyecto vacío:
- Proyecto nuevo -> Visual C ++ -> Proyecto vacío
- Agregue un archivo cpp (digamos Start.cpp) que contendrá su función principal (por ejemplo, el fragmento anterior)
- Configuración DEPURACIÓN
-
Agregue directorios include y lib:
- Propiedades de configuración -> Directorios VC ++
- Incluir directorios: agregar OPENCV_DIR / build / include
- Directorios de la biblioteca: agregue OPENCV_DIR / build / x86 / vc12 / staticlib
-
Agregue las bibliotecas 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)
-
Propiedades de configuración -> C / C ++ -> Generación de código -> Biblioteca de tiempo de ejecución
- Establecer en Depuración de subprocesos múltiples (/ MTd)
-
Para una compilación de LIBERACIÓN, debe realizar los pasos del 6 al 9 en el modo de lanzamiento, agregar libs sin la "d" final en el paso 8, y Multi thread (/ MT) en el paso 9.
- ¡Disfrutar!
Como beneficio adicional, también recomiendo instalar la extensión
Image Watch
para Visual Studio.
¡Muy, muy útil para depurar tus
Mat
s!
Construyo el OpenCV 3.0 desde la fuente. Y con el repositorio contrib para algunos módulos adicionales. Y configuré 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 comunidad VS 2013:
Veo un hilo similar , dijeron que es causado por el problema x86 / x64. Pero mi proyecto ya es x86. Y el OpenCV que construí también está dirigido a x86 (ver más abajo). ¿Qué razón podría ser?
AGREGAR 1
El proyecto
INSTALL
OpenCV 3.0 genera el siguiente directorio lib:
Por lo tanto, es una
x86
.
Mi ruta lib está configurada para la ruta anterior:
Y agregué todos los archivos
*d.lib
.
Y a continuación se muestra el
Configuration Manager
mi proyecto VC
Por lo tanto, también es
x86
.
¿Dónde podría estar mal?
AGREGAR 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 encuentro que su nombre está destrozado exactamente como
fastFree@cv@@YAXPAX@Z
Entonces, ¿por qué no se puede encontrar?