tags:

views:

80

answers:

1

Hello. I was trying to compile a OpenCV's VideoCapture example. When I compile it, I get the following output:

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 is an alias to g++ -lhighgui -lcv -lcxcore)

So, I tried to compile with "gpp --enable-auto-import", but g++ didn't recognize this option. So, I tried to compile like this:

gpp -c test.c
ld test.o

And I've got the same error AND many other errors about STL functions, indicating it didn't link with STL:

undefined reference to std::cout
...

And, finally, when I compiled like this:

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

This time, I've only got the STL errors. The VideoCapture error is gone! So I guess I solved this problem. The only thing is: how do I make ld link my program with STL libraries??????

Thanks in advance

A: 

The correct solution is build with

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

Unlike your 'gpp' alias, this puts libraries after objects which reference them (important when linking with archive libraries), and also properly passes --enable-auto-import flag to the linker.

Your current "fix" only works "by accident".

Employed Russian