2010-09-07 6 views
3

J'essayais de compiler un exemple de VideoCapture d'OpenCV. Quand je compile, je reçois la sortie suivante:LD: liaison avec les bibliothèques STL

gpp test.c 
Info: resolving vtable for cv::VideoCapture by linking to __imp___ZTVN2cv12VideoCaptureE (auto-import) 
c:/programs/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: auto-importing has 
enable-auto-import specified on the command line. 
This should work unless it involves constant data structures referencing symbols from auto-imported DLLs. 

(BTW, gpp est un alias g ++ -lhighgui -lcv -lcxcore)

Alors, j'ai essayé de compiler avec « gpp --enable -auto-import ", mais g ++ n'a pas reconnu cette option. Alors, j'ai essayé de compiler comme ceci:

gpp -c test.c 
ld test.o 

Et j'ai la même erreur et beaucoup d'autres erreurs sur les fonctions de la STL, indiquant qu'il n'a pas de lien avec STL:

undefined reference to std::cout 
... 

Et, enfin, quand je compilé comme ceci:

gpp -c test.c 
ld --enable-auto-import test.o 

cette fois, je n'ai que les erreurs de la STL. L'erreur VideoCapture est partie! Donc je suppose que j'ai résolu ce problème. La seule chose est: comment puis-je faire lier mon programme avec les bibliothèques STL ??????

Merci à l'avance

+0

Résolu. Bien que le paramètre soit "--enable-auto-import" sur ld, vous devez utiliser uniquement "-enable-auto-import" lors de la compilation avec g ++. De cette façon, j'ai pu compiler avec et exécuter mon exemple. – ABC

Répondre

2

La bonne solution est de construire avec

g++ test.c -lhighgui -lcv -lcxcore -Wl,--enable-auto-import 

Contrairement à votre alias « gpp », cela met les bibliothèques après les objets qui les référencent (important lors de la liaison avec les bibliothèques d'archives), et aussi passe correctement le drapeau --enable-auto-import à l'éditeur de liens.

Votre "correction" actuelle ne fonctionne que "par accident".

Questions connexes