2010-09-07 2 views
3

Я пытался скомпилировать пример VideoCapture OpenCV. Когда я компилирую, я получаю следующий результат: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. 

(Btw, GPP является псевдонимом г ++ -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

Решил. Хотя параметр «--enable-auto-import» на ld, при компиляции с g ++ вам нужно использовать только «-enable-auto-import». Таким образом, я смог скомпилировать и запустить свой пример. – ABC

ответ

2

Правильное решение строить с

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

В отличие от вашего «ГПП» псевдоним, это помещает библиотеки после того, как объекты, которые ссылаются на них (важно при связывании с архивными библиотеками), а также правильно передает флаг --enable-auto-import.

Ваше текущее «исправление» работает «случайно».

Смежные вопросы