Я загрузил алгоритм Eigenfaces на С++ с официального сайта OpenCV и скомпилировал его с помощью этой команды:
g++ `pkg-config --cflags --libs opencv` facerec_eigenfaces.cpp -o opencv
Но я получаю эти ошибки:
/tmp/cc0CsJ0b.o: In function `norm_0_255(cv::_InputArray const&)':
facerec_eigenfaces.cpp:(.text+0x51): undefined reference to `cv::noArray()'
facerec_eigenfaces.cpp:(.text+0x65): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
facerec_eigenfaces.cpp:(.text+0x9b): undefined reference to `cv::normalize(cv::_InputArray const&, cv::_OutputArray const&, double, double, int, int, cv::_InputArray const&)'
facerec_eigenfaces.cpp:(.text+0xa2): undefined reference to `cv::noArray()'
facerec_eigenfaces.cpp:(.text+0xb6): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
facerec_eigenfaces.cpp:(.text+0xec): undefined reference to `cv::normalize(cv::_InputArray const&, cv::_OutputArray const&, double, double, int, int, cv::_InputArray const&)'
Я не копирую сюда всю тему, но все они являются «неопределенной ссылкой», и моя версия OpenCV такая же, как ссылка, которую я упомянул.
Вывод (pkg-config --cflags --libs opencv):
-I/usr/local/include/opencv -I/usr/local/include /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_ocl.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_ts.a /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so /usr/local/lib/libopencv_viz.so /usr/lib/i386-linux-gnu/libXext.so /usr/lib/i386-linux-gnu/libX11.so /usr/lib/i386-linux-gnu/libICE.so /usr/lib/i386-linux-gnu/libSM.so /usr/lib/i386-linux-gnu/libGL.so /usr/lib/i386-linux-gnu/libGLU.so -ltbb -lrt -lpthread -lm -ldl
facerec_eigenfaces.o
, созданный из исходного файлаfacerec_eigenfaces.cpp
, зависит от библиотек OpenCV (точный список задается командойpkg-config
), и поэтому библиотеки должны идти после этого файла. Вы также можете заметить тот же шаблон в выводеpkg-config
: например, X11, pthreads и другие системные зависимости Linux идут после зависимых библиотек OpenCV. См. связанные вопросы и ответы для подробных объяснений. 26.07.2015