#c #c #opencv #ubuntu
#c #c #opencv #ubuntu
Вопрос:
Я только что обновил свою систему с ubuntu 11.04 до 11.10, и теперь я больше не могу компилировать какие-либо программы на C, содержащие ссылки на библиотеки OpenCV
Я уже пытался переустановить OpenCV (я использую версию 2.1), но я застрял с этой ошибкой:
/tmp/ccArHTZL.o: In function `main':
z.c:(.text 0x59): undefined reference to `cvLoadImage'
z.c:(.text 0xa0): undefined reference to `cvNamedWindow'
z.c:(.text 0xb1): undefined reference to `cvShowImage'
z.c:(.text 0xbb): undefined reference to `cvWaitKey'
z.c:(.text 0xc5): undefined reference to `cvDestroyWindow'
z.c:(.text 0xd1): undefined reference to `cvReleaseImage'
collect2: ld returned 1 exit status
Чтобы установить OpenCV, я всегда следовал этой процедуре:
$ sudo apt-get install libcv2.1 libcv-dev libcvaux2.1 libcvaux-dev libhighgui2.1
libhighgui-dev opencv-doc python-opencv
$ export LD_LIBRARY_PATH=/home/opencv/lib
$ export PKG_CONFIG_PATH=/home/opencv/lib/pkgconfig
$ pkg-config --cflags opencv
-I/usr/include/opencv
$ pkg-config --libs opencv
-lcxcore -lcv -lhighgui -lcvaux -lml
$ g -I/usr/include/opencv -lcxcore -lhighgui -lm hello.c
Кто-нибудь может мне помочь?
Ответ №1:
Почему бы вам не использовать pkg-config в свою пользу?
g hello.c -o hello `pkg-config --cflags --libs opencv`
Комментарии:
1. Вы всегда должны помещать библиотеки в конец строки: gcc test.c
pkg-config --cflags opencv
-o testpkg-config opencv --libs
. Каким-то образом это стало важным после того, как я обновил Ubuntu до 11.10.2. Ребята, этот совет, положить конец библиотекам .. о боже, вы спасли меня от очередного разочарования!
3. ДА!!!!!!!! @DimitarSlavchev вы только что исправили почти две недели сердечной боли, головной боли и боли! Спасибо вам!
Ответ №2:
Я думаю, это из-за некоторых изменений с gcc 4.5 на gcc 4.6
Попробуйте вместо этого эту команду (т. Е. Переместите библиотеки в конец, а не в начало вашей командной строки) — это работает для меня:
g -I/usr/include/opencv привет.c -lcxcore -lhighgui -lm
Ответ №3:
Я все еще на kubuntu 10.10, поэтому я не совсем знаком с тем, как работает 11.10, но наиболее распространенным ответом на проблемы с отсутствием библиотек является использование ldconfig с sudo. Это обновит базу данных библиотек. Если это не поможет, загляните в /usr/lib , /usr/lib64 и /usr/lib32, потому что это место по умолчанию, куда apt-get вставляет библиотеки. Когда вы найдете библиотеки, измените LD_LIBRARY_PATH, чтобы он содержал каталог. Я не думаю, что /home/opencv/ lib находится там, где они есть, но я не знаю вашей среды
Комментарии:
1. Я нашел все libcv.so библиотеки внутри
/usr/lib
. Затем я предоставил изменить путьexport LD_LIBRARY_PATH=/usr/lib
, но я продолжаю получать ту же ошибку2. Я не эксперт по компоновщикам, но вы пытались скомпилировать его, не вмешиваясь в PKG_CONFIG и LD_LIBRARY_PATH? я полагаю, что, если вы не скомпилировали некоторые библиотеки из исходного кода, значения по умолчанию в порядке. Другое дело, что, как я вижу, вы используете g для компиляции программы на C. Существует небольшая вероятность того, что это проблема. Вы также можете попробовать, работает ли c api. просто чтобы убедиться, что проблема заключается в стороне компоновщика-библиотек-поиска, а не в самой библиотеке.
Ответ №4:
Я только что обновился до 11.04 на своем ноутбуке и столкнулся с аналогичными проблемами. Я бы попробовал собрать последнюю версию OpenCV (2.3.1) и посмотреть, исправит ли это что-нибудь, это, похоже, решило для меня немало проблем.
Комментарии:
1. Ранее я пробовал версию 2.3.1, но столкнулся с МНОЖЕСТВОМ ПРОБЛЕМ, которые вынудили меня перейти на версию 2.1. Так что, к сожалению, для меня обновление до 2.3.1 не вариант
Ответ №5:
Используйте следующую команду, она сработала для меня:
gcc
pkg-config --cflags opencv
opencv.c -o open_cvpkg-config --libs opencv