对符号的未定义引用,但库已链接
Undefined reference to symbol but library is linked
我试图用opencv 3.0构建一个应用程序,我得到一个"未定义的引用符号错误"
我的问题是这个符号是在我链接到的库中定义的。
编译命令:
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
编译命令:
这个不是一个编译命令,它是一个链接命令。 我得到的错误: 错误引用的是 因此,很难相信错误真的来自您给出的链接命令。 最有可能的是,错误来自于不同的链接命令,并且该链接命令没有twowindow.o
,它是而不是链接命令中的。-lopencv_core
。
在链接库之前,给出带有-L标志的库的路径
相关文章:
- 链接 cmake 时出现未定义的引用错误
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对GLFW / Vulkan的未定义引用,尽管库似乎是链接的
- ld 链接器错误,未定义对主函数的引用
- 与共享库链接时未定义的引用
- 链接提升 - 未定义对"提升::序列化::singleton_module::get_lock()"的引用
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 如何在 Linux 中构建共享库时使未定义引用的链接器失败
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 引用构造函数时链接失败
- CMake 不链接 C 和 C++ 静态库(未定义对函数的引用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- 链接器错误:在包含 .so lib 后未定义对 xxx 的引用
- 未定义的引用,即使库正在链接并且它包含正确的符号
- C++ 链接器错误 LNK 2019 函数中引用的未解析的外部符号
- boost::存在符号链接不取消引用
- 链接时突然收到maxrregcount警告和未定义的引用错误
- 与 libavcodec 链接,仍然看到未定义的引用