ubuntu20.04 opencv4.0 /usr/local/lib/libgflags.a(gflags.cc.o): relocation报错解决

在一个只有ubuntu20.04的docker环境中配置opencv4.0.0,
什么库都没有,都要重新安装,
其他的问题在网上都找到了解决方案,唯独这个问题比较棘手:
[ 86%] Linking CXX executable …/…/bin/opencv_annotation
/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5’ can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: [modules/sfm/CMakeFiles/opencv_sfm.dir/build.make:243: lib/libopencv_sfm.so.4.0.0] Error 1
make[1]: [CMakeFiles/Makefile2:12239: modules/sfm/CMakeFiles/opencv_sfm.dir/all] Error 2

我看出是编译libopencv_sfm.so时出的问题,也看出需要用-fPIC重新编译gflags

# 1. 首先清理之前的安装
sudo apt remove libgflags-dev
cd ~/gflags
rm -rf buildcmake -DCMAKE_BUILD_TYPE=Release \-DBUILD_SHARED_LIBS=ON \-DCMAKE_CXX_FLAGS="-fPIC" \-DCMAKE_C_FLAGS="-fPIC" \-DCMAKE_INSTALL_PREFIX=/usr/local \..# 3. 编译和安装
make -j$(nproc)
sudo make install
sudo ldconfig

编译好之后再重新build opencv,
注意我是在root权限下,不是root的前面都加上sudo

cd ~/opencv/build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.0.0 -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.0.0/modules -D BLAS_LIBRARIES=/usr/lib/x86_64-linux-gnu/libblas.so -D LAPACK_LIBRARIES=/usr/lib/x86_64-linux-gnu/liblapack.so ..make -j8
make install
#更新系统的动态链接库缓存
ldconfigsudo nano ~/.bashrc# 在文件末尾添加以下内容
# 根据自己的安装路径来,我是cmake时指定了安装在/usr/local/opencv4.0.0
export OpenCV_DIR=/usr/local/opencv4.0.0
export PATH=$PATH:$OpenCV_DIR/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OpenCV_DIR/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$OpenCV_DIR/lib/pkgconfig
export CPATH=$CPATH:$OpenCV_DIR/include/opencv4# 保存并退出(在nano中按Ctrl+X,然后按Y确认,最后按Enter)
#用vi也行# 使环境变量生效
source ~/.bashrc

为了确保pkg-config能正确找到OpenCV,还需要创建或修改pkg-config文件:

# 如果pkg-config文件夹不存在,创建它
sudo mkdir -p /usr/local/opencv4.0.0/lib/pkgconfig# 创建opencv4.pc文件
sudo nano /usr/local/opencv4.0.0/lib/pkgconfig/opencv4.pc#添加以下内容
prefix=/usr/local/opencv4.0.0
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${prefix}/libName: OpenCV
Description: Open Source Computer Vision Library
Version: 4.0.0
Cflags: -I${includedir}
Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_flann

最后验证安装:

# 检查环境变量是否设置成功
echo $LD_LIBRARY_PATH
echo $PKG_CONFIG_PATH# 检查OpenCV是否能被找到
pkg-config --modversion opencv4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前OpenAI首席技术官为新AI初创公司筹资;我国发布首个应用临床眼科大模型 “伏羲慧眼”|AI日报

文章推荐 2024人工智能报告.zip |一文迅速了解今年的AI界都发生了什么? 今日热点 据报道,前OpenAI首席技术官Mira Murati正在为一家新的AI初创公司筹集资金 据路透社报道,上个月宣布离职的OpenAI首席技术官Mira Murati正在为一…

栈和队列(一)

栈和队列的定义和特点 栈和队列是一种特殊的线性表,只能在表的端点进行操作 栈的定义和特点 这就是栈的结构,是一个特殊的线性表,只能在栈顶(或者说是表尾)进行操作。其中top为栈顶,base为栈底 栈s的存储…

C语言结构体数组 java静动数组及问题

1. (1)先声明,后定义:如上一天 //(2).声明时直接定义 #define N 5 typedef struct student { int num; int score; }STU; int main(void) { STU class3[N] { {10,90},{14,70},{8,95} }; …

全面解析:集成AWS、云原生和监控的开源运维管理平台

在当今复杂的IT环境中,寻找一个能够同时支持AWS、云原生技术(如Kubernetes)和全面监控功能的开源运维管理平台,已成为许多组织的迫切需求。本文将深入探讨几个有潜力满足这些需求的开源解决方案,分析它们的优势、局限性…

华为:高级ACL 特定ip访问特定ip命令

网络拓扑图: 网络环境: 全网互通即可 1.创建一个名为test的高级ACL acl name test advance 2.添加规则 ##拒绝所有ip访问 rule 10 deny ip source any destination 192.168.1.10 0.0.0.0 只允许特定ip访问特定ip rule 5 permit ip source 192.168.2.10…

【Vulnhub靶场】Kioptrix Level 5

目标 本地IP:192.168.118.128 目标IP:192.168.118.0/24 信息收集 nmap探测存活主机,扫全端口,扫服务 首先探测到目标ip为:192.168.118.136 nmap -sP 192.168.118.0/24nmap -p- 192.168.118.136nmap -sV -A 192.168.…

BurpSuite渗透工具的简单使用

BurpSuite渗透工具 用Burp Suite修改请求 step1: 安装Burp Suite。官网链接:Burp Suite官网 step2: 设置代理 step3: 如果要拦截https请求,还需要在客户端安装证书 step4: 拦截到请求可以在Proxy ->…

句柄是什么?有什么用?举例说明

在C#编程中,“句柄”(Handle)是一个与操作系统资源相关联的标识符。句柄是一个指针或者索引,用于在程序代码中引用系统资源,如窗口、文件、线程等。由于直接操作这些资源非常危险且复杂,操作系统提供句柄作…

虚拟机风格

虚拟机风格是一种构建系统架构的方法,旨在创建一个抽象的运行环境,以便在其上运行和解释特定的程序语言或规则集。这种架构风格增加了系统的灵活性,允许用户在一个统一的虚拟环境中执行不同的代码、应用程序或规则,避免直接依赖底…

JAVA本地编译运行出现的找不到类名问题

问题描述: JAVA本地编译运行: $ javac TestProgram.java $ java TestProgram $ 错误: 找不到或无法加载主类 TestProgram 问题排查以及解决方案: 命令行路径正确且当前目录下成功编译了TestProgram.class,java -version显示正常…

【嵌入式实时操作系统开发】智能家居入门4(FreeRTOS、MQTT服务器、MQTT协议、STM32、微信小程序)

前面已经发了智能家居入门的1、2、3了,在实际开发中一般都会使用到实时操作系统,这里就以FreeRTOS为例子,使用标准库。记录由裸机转到实时操作系统所遇到的问题以及总体流程。相较于裸机,系统实时性强了很多,小程序下发…

opencv环境配置-适配b站阿童木的opencv教程

首先,opencv作为一个库文件,目的是为了让更多人不需要学习底层像素操作就能上手视觉技术,所以他适配很多环境,目前电脑端我知道的就可以适配C语言 C Python MCU端就是openmv跟他最类似,还有个k210 canmv 阿童木教的…

Unity 山水树木

本章节内容 1. Unity对3D游戏物体的简单操作; 2. 构建山水树木的场景 1. Unity 简易操作 1.1 新建3D游戏场景 1. 打开Unity Hub,点击 New Project (新建项目)按键,选择第二项 3D(Built-In Render Pipeline)&#xf…

中介者模式 (Mediator Pattern)

好的,我们来深入探讨 中介者模式 (Mediator Pattern),并结合 多个事件通道(Event Channels) 和 多个事件处理器(Event Processors) 的场景进行详细的讲解。 中介者模式的详细讲解: 在更复杂的…

Linux之实战命令41:lshw应用实例(七十五)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

虚拟滚动是怎么做性能优化的?

前言 一个简单的情景模拟(千万别被带入): A: 假设现在有 10 万条数据,你作为前端该怎么优化这种大数据的列表? B: 针对大数据列表一般不会依次性加载,会采用上拉加载、分页加载等…

如何用数据字典提升数据质量和决策效率?

在前面的文章中我们谈到过数据字典的概念,本文将继续探讨如何用数据字典提升数据质量和决策效率。 一、数据字典 数据字典:一种对数据的定义和描述的集合,它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字…

Java中的一些名词概念

**函数式接口:** 概念&#xff1a;一个接口中的抽象方法只有一个&#xff0c;那么这个接口就是一个函数式接口。形参: 形参变量是**功能函数里的变量**&#xff0c;只有<u>在被调用的时候才分配内存单元</u>&#xff0c;<u>调用结束后立即释放</u>。…

AUTOSAR_EXP_ARAComAPI的6章笔记(2)

☞返回总目录 相关总结&#xff1a;AutoSar AP CM实例说明符的使用方法总结 6.2 实例说明符的使用方法 一、InstanceSpecifier 的概念 InstanceSpecifier 是在 [3] 中定义的一个核心概念&#xff0c;它由符合特定模型元素绝对路径的模型元素 shortName 组成&#xff0c;表现…

【10月最新】植物大战僵尸杂交版即将新增【植物】内容介绍预告(附最新版本下载链接)

新增植物 玉米旋转机 玉米旋转机是一种支持性植物&#xff0c;每4秒可散射6颗油炸玉米或黄油&#xff08;概率20%&#xff09;&#xff0c;油炸玉米经过火炬可变为爆米花&#xff0c;造成范围爆炸伤害。其价格为325&#xff0c;并在每种植一颗后&#xff0c;价格增加50。玉米旋…