c++ - undefined symbol 引用但库已链接

标签 c++ shared-libraries opencv3.0

我正在尝试使用 opencv 3.0 构建应用程序,但出现“ undefined symbol 引用错误”

我的问题是符号是在我链接到的库中定义的。

编译命令:

g++ -o DisparityMap main.o tools.o emb.o moc_tools.o moc_emb.o -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -lopencv_calib3d -lQtGui -lQtCore -lpthread

我得到的错误:

/usr/bin/ld: twowindow.o: undefined reference to symbol '_ZN2cv6String10deallocateEv'
//usr/local/lib/libopencv_core.so.3.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

但有问题的符号实际上是在我链接到的库中定义的:

scanelf -l -s _ZN2cv6String10deallocateEv | grep _ZN2cv6String10deallocateEv

ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_objdetect.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_photo.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_core.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_video.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_features2d.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_ml.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_highgui.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_videoio.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_stitching.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_videostab.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_superres.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_flann.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_imgproc.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_imgcodecs.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_calib3d.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_shape.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_objdetect.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_photo.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_core.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_video.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_features2d.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_ml.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_highgui.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_videoio.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_stitching.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_videostab.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_superres.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_flann.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_imgproc.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_imgcodecs.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_calib3d.so.3.0.0 
ET_DYN _ZN2cv6String10deallocateEv /usr/local/lib/libopencv_shape.so.3.0.0 

最佳答案

Compile command:

不是一个编译命令,它是一个链接命令。

The error I get:

错误是引用 twowindow.o,它在您的链接命令中

因此,很难相信错误真的来自您提供的链接命令。

错误很可能来自不同链接命令,那个链接命令没有-lopencv_core

关于c++ - undefined symbol 引用但库已链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33020230/

相关文章:

c++ - 在 Makefile 先决条件中包含头文件的原因

c++ - 将 C++ 对象传递给它自己的构造函数是否合法?

c++ - Linux中共享对象和普通库的区别

python - python /OpenCV : Installing with Tracking features

opencv - 使用 opencv 3.0.0 beta 将图像点投影到对象点

c++ - 在 Flashdevelop OpenFL 中编译需要 31 分钟

c++ - Mongocxxchange_stream回调

从 LibreOffice Basic 调用 C 共享库函数

java - 在 JBoss AS 7 中放置共享库的位置

python - 在hough函数中传递math.pi(pi编号)的原因是什么?