解决 undefined reference to cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>,....

这篇具有很好参考价值的文章主要介绍了解决 undefined reference to cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>,....。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用opencv时候可能会遇到undefined reference to cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
其主旨原因是使用的函数版本和引用的库函数版本不一至,要确保使用的函数和引用的库函数版本一致。

1、如何知道函数版本和引用的是否一样

1.1使用nm对目标文件进行分析
  1. 生成.o文件
g++ -E -I/usr/local/include/opencv4/ -L/usr/local/lib -lopencv_highgui  -lopencv_imgcodecs -lopencv_imgproc -lopencv_core  /home/lvrobot/OpencvStudy/fangwenyuansu.cpp -o /home/lvrobot/OpencvStudy/fangwenyuansu.i  //预处理
g++ -S -I/usr/local/include/opencv4/ -L/usr/local/lib -lopencv_highgui  -lopencv_imgcodecs -lopencv_imgproc -lopencv_core  /home/lvrobot/OpencvStudy/fangwenyuansu.i -o /home/lvrobot/OpencvStudy/fangwenyuansu.s //编译
g++ -c -I/usr/local/include/opencv4/ -L/usr/local/lib -lopencv_highgui  -lopencv_imgcodecs -lopencv_imgproc -lopencv_core  /home/lvrobot/OpencvStudy/fangwenyuansu.s -o /home/lvrobot/OpencvStudy/fangwenyuansu.o  //汇编
  1. 使用nm -C fangwenyuansu.o 查看使用的外部函数
U cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)
U cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)
  1. 查看引用库对应的函数类型,这里主要是对libopencv_imgcodecs.a,libopencv_highgui.a进行查看(根据使用的函数进行)nm -C libopencv_highgui.a/ nm -C libopencv_imgcodecs.a
 U cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)
 T cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)

主要查看函数签名是否一致。

2、解决问题

2.1、函数版本不一致

编译使用的C++,gcc编译器等版本不一致会导致函数版本不一致

查阅资料说以下方法可以解决

  • 在编译的时候加上-D_GLIBCXX_USE_CXX11_ABI=0即可(参考《g++命令行参数》的-Dmacro=defn部分)。
  • 在每个源文件中添加一个宏定义:# define _GLIBCXX_USE_CXX11_ABI 0。
    可自行尝试
  • 在本地环境重新编译,确保编译opencv的编译器与环境和使用的一样
2.2、函数版本一致,环境中有多个opencv导致使用的头文件和库不对应

编译opencv时开启-D OPENCV_GENERATE_PKGCONFIG=ON
(cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH= …/opencv4/opencv_contrib/modules -D OPENCV_EXAMPLES=ON …)

使用pkg-config --cflags opencv4 获取opencv头文件路径

-I/usr/local/include/opencv4

使用pkg-config --libs opencv4 获取库路径

-L/usr/local/lib -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

可以全部加入,最好根据使用的函数选择的引用

2.3、函数版本和路径都是对应没有问题的时候,应该注意一下引用库的路径

正确的编译命令

g++ -g -I/usr/local/include/opencv4/ /home/lvrobot/OpencvStudy/fangwenyuansu.cpp -o /home/lvrobot/OpencvStudy/fangwenyuansu -L/usr/local/lib -lopencv_highgui  -lopencv_imgcodecs -lopencv_imgproc -lopencv_core  

解决 undefined reference to cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>,....
不正确的编译命令(引用库的位置不对)

g++ -g -I/usr/local/include/opencv4/ -L/usr/local/lib -lopencv_highgui  -lopencv_imgcodecs -lopencv_imgproc -lopencv_core /home/lvrobot/OpencvStudy/fangwenyuansu.cpp -o /home/lvrobot/OpencvStudy/fangwenyuansu 

解决 undefined reference to cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>,....
这个也要注意一下文章来源地址https://www.toymoban.com/news/detail-511836.html

到了这里,关于解决 undefined reference to cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>,....的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vitis HLS出现undefined reference to的可能解决办法

    问题描述: undefined reference to `cv::namedWindow(std::__cxx11::basic_stringchar, std::char_traitschar, std::allocatorchar const, int)\\\' undefined reference to `cv::resizeWindow(std::__cxx11::basic_stringchar, std::char_traitschar, std::allocatorchar const, int, int)\\\' undefined reference to `cv::imshow(std::__cxx11::basic_stringchar, std::char_traitscha

    2024年02月02日
    浏览(37)
  • Dev C++中出现 undefined reference to XXX 错误的解决方式

            主函数中调用在其他文件中定义的函数,编译报错:未定义的引用xxx。         原理:编译器在生成可执行文件的过程包括预处理、编译、汇编、链接,这4个过程,这个问题一般出现在 链接 过程,所谓的链接过程,就是把不同的目标文件粘合在一起,生成一

    2024年02月03日
    浏览(33)
  • 调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

    我的CMakeLists.txt如下: cpp代码如下: 因为我的c++程序采用mingw64编译,所以使用 之后,总是出现undefined reference to cv::Mat::Mat()等一系列的undefined reference to XXX 原因是没有正确链接到动态库。或者之前有安装其他版本的opencv 重新编译一份OpenCV的源码再使用 编译过程参考: https

    2024年02月05日
    浏览(51)
  • windows下MSYS、MinGW编译环境使用网络API时报错:undefined reference to `inet_pton‘解决办法

    mingw-gcc环境使用网络需要加上库 -lws2_32。 如果是使用的是Qt Creator那么需要在.pro文件中加入一行: win32:LIBS += -lws2_32 。 当在项目中使用 inet_pton、inet_pton、inet_ntop、inet_ntop 等ip转换函数时会报未定义的错误,这是因为在windows系统下这些函数的定义在头文件 winsock2.h 和 ws2tcpip

    2024年02月11日
    浏览(30)
  • CMake 链接时出现undefined reference to 错误

    一、问题背景 之前新建了一个项目项目文件分布为 1. src/MROR.cpp 2.include/MROR.h 3.main.cpp 执行cmake出现undefined reference toxx,显示main函数中的类成员函数调用没有声明,但是所有声明已经在MROR.h中写了 二、解决方法 我查了很多网上资料 解决方法 1) 可能MROR.cpp文件没有链接到项目,

    2024年02月09日
    浏览(51)
  • nmealib库编译提示 undefined reference to `ceil‘

    下载了nmealib库文件,默认工程进行编译,报错,提示如下: 网上搜索,因为使用了 ceil 数学相关的库,说是链接需要添加 -lm 的参数。 官方的 Makefile 文件 可以看到 LIBS 已经包含了 lm 。目前的报错该怎么解决呢? 解决办法:修改 LIBS 中 lm 的位置,放在后面。 如下: 再次编

    2024年01月20日
    浏览(30)
  • undefined reference to `__android_log_print‘

    今天给JNI的C代码添加“__android_log_print”日志打印,发现报错。 这里对原因进行分析 build.gradle中 CCallJava.c(JNI文件中) so文件没有没有添加log的链接库,添加“LOCAL_LDLIBS := -llog”即可

    2024年01月20日
    浏览(65)
  • openssl库HMAC使用 undefined reference to `HMAC_CTX_new‘

    由于使用的openssl库版本的问题 HMAC_CTX *HMAC_CTX_new(void) 为OpenSSL 1.1.0后开始引入的函数,老的库要使用 void HMAC_CTX_init(HMAC_CTX *ctx) 。 函数原型 官网介绍 使用 HMAC的实现在crypto/hmac/hmac.c中,如下: evp_md指明HMAC使用的摘要算法; key为秘密密钥指针地址; key_len为秘密密钥的长度;

    2024年02月11日
    浏览(38)
  • cv2.imread读取中文路径解决方案

    import cv2 import numpy as np

    2024年02月11日
    浏览(29)
  • opencv的cv2.imread解决中文路径问题

    cv2.imread()读取不了中文路径,但是cv2.imdecode可以解码 拓展: cv2.imdecode(…)/cv2.imencode(…)传入参数为包含图像文件内容的内存buffer,为整个文件的内容,包含格式说明、图像数据等等,并非只有图像像素数据。 语法如下: 1 imdecode(buf, flags)        buf: 包含图像文件的buffer  

    2024年04月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包