2012-05-06 15 views
7

prima di pubblicare una domanda qui per StackOverflow. Scusa se butcherò la formattazione!errore di simbolo esterno non risolto durante l'importazione di librerie per OpenCV2.3 in Visual Studio 2010 Express C++

Sto tentando di seguire un tutorial di base su OpenCV, vale a dire questo: http://aishack.in/tutorials/tracking-colored-objects-in-opencv/

Ho guardato vari esercitazione in linea su come installare OpenCV, tra cui:

Setup OpenCV-2.3 for Visual Studio 2010 e OpenCV. willowgarage.com/wiki/VisualC%2B%2B

senza molta fortuna.

La versione corrente che sto utilizzando adesso è OpenCV 2.3.0. Sono attualmente in esecuzione su Windows 7 con Microsoft Visual C++ espresso 2010.

Ogni volta che provo a costruire e gestire il mio codice, ho i seguenti errori:

1>------ Build started: Project: Camera, Configuration: Debug Win32 ------ 
1>camera.obj : error LNK2019: unresolved external symbol _cvReleaseImage referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvInRangeS referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvCvtColor referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvCreateImage referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvGetSize referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvReleaseCapture referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvWaitKey referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvShowImage referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvAdd referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvLine referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvGetCentralMoment referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvGetSpatialMoment referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvMoments referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvQueryFrame referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvNamedWindow referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvCreateCameraCapture referenced in function _main 
1>C:\Users\Kevin\Documents\Visual Studio 2010\Projects\Camera\Debug\Camera.exe : fatal error LNK1120: 16 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Il mio codice è il seguente:

#include "cv.h" 
#include "highgui.h" 

IplImage* GetThresholdedImage(IplImage* img) 
{ 
IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3); 
cvCvtColor(img, imgHSV, CV_BGR2HSV); 
IplImage* imgThreshed = cvCreateImage(cvGetSize(img), 8, 1); 
cvInRangeS(imgHSV, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed); 
cvReleaseImage(&imgHSV); 
return imgThreshed; 
} 

int main() 
{ 
CvCapture* capture = 0; 
capture = cvCaptureFromCAM(1); 
    if(!capture) 
{ 
    printf("Could not initialize capturing...\n"); 
    getchar(); 
    return -1; 
} 

cvNamedWindow("video"); 
cvNamedWindow("thresh"); 
IplImage* imgScribble = NULL; 

while(1) 
{ 
    IplImage* frame = 0; 
    frame = cvQueryFrame(capture); 

    if(!frame) 
     break; 
    //cvErode(frame, frame, 0, 2); // ADD this line 
    //initalize the scribble frame if has not already been done yet 
    if(imgScribble == NULL) 
    { 
     imgScribble = cvCreateImage(cvGetSize(frame), 8, 3); 
    } 
    IplImage* imgYellowThresh = GetThresholdedImage(frame); 

    CvMoments *moments = (CvMoments*)malloc(sizeof(CvMoments)); 
    cvMoments(imgYellowThresh, moments, 1); 

    // The actual moment values 
    double moment10 = cvGetSpatialMoment(moments, 1, 0); 
    double moment01 = cvGetSpatialMoment(moments, 0, 1); 
    double area = cvGetCentralMoment(moments, 0, 0); 

    // Holding the last and current ball positions 
    static int posX = 0; 
    static int posY = 0; 

    int lastX = posX; 
    int lastY = posY; 

    posX = moment10/area; 
    posY = moment01/area; 

    printf("position (%d,%d)\n", posX, posY); 

    // We want to draw a line only if its a valid position 
    if(lastX>0 && lastY>0 && posX>0 && posY>0) 
    { 
     // Draw a yellow line from the previous point to the current point 
     cvLine(imgScribble, cvPoint(posX, posY), cvPoint(lastX, lastY), cvScalar(0,255,255), 5); 
    } 


    cvAdd(frame, imgScribble, frame); 
    cvShowImage("thresh", imgYellowThresh); 
    cvShowImage("video", frame); 

    int c = cvWaitKey(5); 
     if((char)c==27) 
     break; 

    // Release the thresholded image+moments... we need no memory leaks.. please 
    cvReleaseImage(&imgYellowThresh); 

    delete moments; 
} 
// We're done using the camera. Other applications can now use it 
cvReleaseCapture(&capture); 
cvReleaseCapture(&capture); 
return 0; 

} 

ho installato Aperto CV a C:\OpenCV2.3

ho aggiunto ulteriori dipendenze, aggiungi directory itionali, ecc. Per le preferenze per il mio progetto, che sono i seguenti:

Dipendenze aggiuntive:

enter code here 
opencv_core230.lib 
opencv_highgui230.lib 
opencv_legacy230.lib 
opencv_video230.lib 
opencv_ml230.lib 
opencv_core230d.lib 
opencv_highgui230d.lib 
opencv_legacy230d.lib 
opencv_video230d.lib 
opencv_ml230d.lib 
opencv_calib3d230d.lib 

Aditional Biblioteca Directories: include C:\OpenCV2.3\build\x64\vc10\lib;C:\OpenCV2.3\build\x64\vc10\bin;C:\OpenCV2.3\build\x64\vc10\staticlib;%(AdditionalLibraryDirectories)

aggiuntive Directory:

C:\OpenCV2.3\build\include\opencv;C:\OpenCV2.3\build\include\opencv2;C:\OpenCV2.3\build\include 

anche io incluso un percorso per la DLL sulla mia variabile percorso per windows:

;C:\OpenCV2.3\build\x64\vc10\bin;C:\OpenCV2.3\build\bin; 

Ho esaminato altri forum, altre domande di overflow dello stack, ecc senza molto aiuto. Ho cercato di farlo funzionare per la parte migliore di un weekend. Qualsiasi aiuto sarebbe molto apprezzato!

+1

perché la stessa domanda viene richiesta due volte in 4 ore: http://stackoverflow.com/questions/10472393/opencv-wont-compile-due-to-unresolved-externals-lnk2019#comment13530952_10472393 – guinny

risposta

19

Se avete fatto in modo esplicito impostare il collegamento con tutto il necessario librerie, ma gli errori di collegamento continuano a mostrare, potresti confondere librerie e applicazioni a 64/32 bit.

I.e. assicurati che tutta la libreria includa il punto della versione a 32 bit delle librerie se stai costruendo un'applicazione a 32 bit.

+3

FYI: BUILD -> Gestore della configrazione. controllare 'piattaforma' è 'x64'. – plhn

+0

+1 per l'impostazione della piattaforma di Configuration Manager. Grazie. – user1738934

3

ho avuto un problema simile mentre stavo cercando di compilare libreria cvblob (http://code.google.com/p/cvblob/) su Windows 7 a 32 bit con Visual Studio 2010.

Se tutto altrimenti è fatto correttamente prova la mia ipotesi scritta qui sotto. Se non iniziare con questi tutorial:

  • OpenCV Installazione: http://docs.opencv.org/trunk/doc/tutorials/introduction/windows_install/windows_install.html#cpptutwindowsmakeown
  • Configurare i vostri progetti per costruire e lavorare con OpenCV: http://docs.opencv.org/trunk/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html#windows-visual-studio-how-to.

    Questi errori del linker silimar scomparsi dopo aver cambiato qualche progetto proprietà:

    • in VS 2010 Open La soluzione
    • Aprire Esplora soluzioni (Visualizza-> Solution Explorer)
    • Trova un progetto che generato questi errori del linker. (Nel mio esempio si trattava di un progetto denominato "cvblob" dentro soluzione chiamata "cvBlob" generato da CMake.)
    • tasto destro su quel progetto
    • Dal menu contestuale selezionare proprietà
    • Sul sinistra selezionare proprietà Configurazione -> Generale e trovare un campo chiamato "estensione di destinazione"
    • In project Dettagli trovare le impostazioni del progetto per "Tipo di configurazione"
    • analizzarli. Nel mio particolare problema di compilazione di cvblob ho dovuto impostare l'estensione di destinazione su .lib e Tipo di configurazione su Libreria statica. Questa è anche una soluzione per i ragazzi che tentano di compilare la libreria cvblob in Visual Studio 2010. Fare lo stesso per la versione di debug e rilascio, se necessario.

errori che ho ottenuto sono stati:

Error 24 error LNK2019: unresolved external symbol _cvSetImageROI referenced in function _cvSetImageROItoBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 25 error LNK2019: unresolved external symbol _cvSaveImage referenced in function _cvSaveImageBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 26 error LNK2019: unresolved external symbol _cvGetImageROI referenced in function _cvSaveImageBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 27 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvcolor.obj cvblob

Error 28 error LNK2019: unresolved external symbol _cvError referenced in function _cvRenderBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 29 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvlabel.obj cvblob

Error 30 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvcontour.obj cvblob

Error 31 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvtrack.obj cvblob

Error 32 error LNK2019: unresolved external symbol _cvLine referenced in function _cvRenderBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 33 error LNK2001: unresolved external symbol _cvLine C:\cvblob\build\lib\cvcontour.obj cvblob

Error 34 error LNK2019: unresolved external symbol _cvRectangle referenced in function _cvRenderBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 35 error LNK2001: unresolved external symbol _cvRectangle C:\cvblob\build\lib\cvtrack.obj cvblob

Error 36 error LNK2019: unresolved external symbol _cvSetZero referenced in function _cvLabel C:\cvblob\build\lib\cvlabel.obj cvblob

Error 37 error LNK2019: unresolved external symbol _cvPutText referenced in function _cvRenderTracks C:\cvblob\build\lib\cvtrack.obj cvblob

Error 38 error LNK2019: unresolved external symbol _cvInitFont referenced in function _cvRenderTracks C:\cvblob\build\lib\cvtrack.obj cvblob

Error 39 error LNK1120: 9 unresolved externals C:\cvblob\build\lib\libs\Release\cvblob.dll cvblob

spero che vi aiuterà qualcuno compilazione biblioteca cvblob in Visual Studio 2010.

+0

Bello! Ho trovato il mio edificio, ma ora come lo eseguo? : P – JSideris

+0

D'accordo, come lo gestisci ora? –

+0

questo è solo quando si costruisce un lib non un eseguibile ..... – user1767754

1

ho avuto lo stesso problema, in VS10

ho perso il "opencv_core246d.lib" per aggiungere. aggiungendolo a Linker-> Input-> Errore fisso dipendenze dell'adulto.

1

Questo potrebbe aiutare con la versione più recente.
Per la versione 2.4.8, aggiungendo opencv_imgproc248.lib risolve il seguente errore di collegamento:

error LNK2019: unresolved external symbol _cvRemap referenced in function _main 
error LNK2019: unresolved external symbol _cvInitUndistortMap referenced in function _main 
error LNK2019: unresolved external symbol _cvFindCornerSubPix referenced in function _main 
error LNK2019: unresolved external symbol _cvCvtColor referenced in function _main 
2

ho avuto problema simile in VS10 e ho dimenticato di aggiungere il cv210d.lib. Aggiungendo questo alle proprietà del progetto-> proprietà di configurazione-> Linker-> Input-> Dipendenze Adizionali mi ha aiutato a risolvere questo problema. Ho trovato dalla domanda che opencv_cv230.lib non è stato incluso in ulteriori dipendenze aggiungendo che aiuterà a risolvere il problema.

0

per me, questo errore è stato risolto aggiungendo due nomi lib in modo esplicito in input (proprietà di configurazione -> linker -> input -> dipendenze aggiuntive).

quando si installa opencv, in base alla versione verrà aggiunto un numero. Ad esempio, ho opencv2.4.13 e ha aggiunto 2413 a tutte le sue librerie, opencv_highgui2413.lib (opencv_highgui2413d.lib per la compilazione di debug).

Ora, controllare quali librerie hanno le funzioni che sono state mostrate negli errori. highgui ha la funzione cvshowimage -> puoi ottenerlo bruciandolo online. http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html

Quindi aggiungere tale libreria per inserire e creare la soluzione.

Problemi correlati