LD: связь с библиотеками STL - PullRequest
       44

LD: связь с библиотеками STL

3 голосов
/ 07 сентября 2010

Я пытался скомпилировать пример VideoCapture для OpenCV. Когда я его компилирую, я получаю следующий вывод:

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 ??????

Заранее спасибо

1 Ответ

2 голосов
/ 12 сентября 2010

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

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

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

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

...