2010-09-07 93 views
3

我试图编译一个OpenCV的VideoCapture示例。当我编译它,我得到以下的输出:LD:与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. 

(顺便说一句,GPP是一个别名到g ++ -lhighgui -lcv -lcxcore)

于是,我试着用“GPP --enable编译-auto-import“,但是g ++没有认出这个选项。所以,我试图编译如下:

gpp -c test.c 
ld test.o 

而且我得到了同样的错误,并且对STL功能很多其他错误,表明它没有与STL链接:

undefined reference to std::cout 
... 

而且,最后,当我这样编译:

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

这次,我只有STL错误。 VideoCapture错误消失了!所以我想我解决了这个问题。唯一的问题是:我如何让ld将我的程序与STL库联系起来?

在此先感谢

+0

解决了它。尽管ld中的参数是“--enable-auto-import”,但在使用g ++进行编译时,只能使用“-enable-auto-import”。这样,我就可以编译并运行我的示例。 – ABC 2010-09-07 17:28:58

回答

2

正确的解决方法是建立与

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

不像你“GPP”的别名,这使图书馆其中引用它们的对象后(与归档库链接时重要的),并且还正确地将--enable-auto-import标志传递给链接器。

您目前的“修复”仅适用于“意外”。