0
我有一个程序正确编译和工作在一台机器上,我试图在另一台类似的机器上运行它:相同的操作系统(Debian Stretch),安装了相同的相关软件包,以及相同版本的opencv(libopencv-dev版本:2.4.9.1 + dfsg-2)。然而,在第二台机器上,LD未能OpenCV的highgui符号链接:ld找不到opencv highgui符号(未定义的参考)
$ g++ $(pkg-config --cflags opencv) SDLTest.c $(pkg-config --libs opencv) -l pthread -L/usr/lib/x86_64-linux-gnu -lSDL
-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -O3 /tmp/ccbTuxi1.o : Dans la fonction « opencv_calibrate(cv::VideoCapture) » :
SDLTest.c:(.text+0x33d3) : référence indéfinie vers « cv::namedWindow(std::string const&, int) »
SDLTest.c:(.text+0x3416) : référence indéfinie vers « cv::setMouseCallback(std::string const&, void (*)(int, int, int, int, void*), void*) »
SDLTest.c:(.text+0x3570) : référence indéfinie vers « cv::imshow(std::string const&, cv::_InputArray const&) »
SDLTest.c:(.text+0x36e0) : référence indéfinie vers « cv::destroyWindow(std::string const&) » collect2: error: ld returned
1 exit status
所有相应的软件包安装(libopencv- *和* libhighgui-)。 发现LDCONFIG的.so文件:
$ sudo ldconfig -v 2>/dev/null | grep highgui libopencv_highgui.so.2.4
-> libopencv_highgui.so.2.4.9
和文件存在:
$ locate libopencv_highgui.so.2.4.9
/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9
有很多变量在整个代码OpenCV的,但由于某些原因,highgui功能是创建只有一个麻烦。
在我的代码,包括我的C头文件(这对于包括C++ API某种原因):
#include <cv.h>
#include <cvaux.h>
#include <highgui.h>
,并使用C++头,而不是没有任何改变。
我出来的想法。任何想法?
编辑:的 输出pkg配置--libs的OpenCV:
/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d /usr/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib /usr/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core /usr/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d /usr/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann /usr/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu /usr/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc /usr/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy /usr/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect /usr/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl /usr/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo /usr/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching /usr/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres /usr/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts /usr/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video /usr/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab
'pkg-config --libs opencv'的输出是什么? *但由于某些原因,highgui函数是唯一造成麻烦的函数*编译器可能由于错误太多而停止。 –
我将pkg-config --libs opencv的输出添加到主文章中。我确定提到的函数是问题,因为如果我删除相关代码,程序将编译并正确执行。 – Perdu
您确定这些功能在您使用的版本中仍然存在吗?在你的编译命令中加入'-Wall -Werror'。它是否告诉你关于隐式声明的函数? –