ubuntu opencv 编译失败 relocation R_X86_64_32 against `.rodata.str1.1'

CMake编译报错/usr/bin/ld: ../lib/libXXX.a(XXX.cc.o): relocation R_X86_64_PC32 against symbol Ubuntu上生成C++动态链接库出错 当前工程的需求是把调用了boost库的C++工程编译成为一个动态链接库以供Python调用,(boos 的使用过程也有些曲折,详细过程及模板伪代码请见本人的这篇博客: ),但是在调整完成wrapper.cc后,编译,报错提示 /usr/bin/ld: ../lib/libXXX.a(XXX.cc.o): relocation R_X86_64_PC32 against symbol `_ZN8planning4eudm31_LonSim 阅读详情

ubuntu14.04安装配置FFmpeg+opencv-3.1.0+python 调用opencv模块

这次因为写python时候要调opencv的函数,在ubuntu14.04安装了opencv,中间出现一个安装错误:

/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [lib/libopencv_videoio.so.3.0.0] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

导致大半夜时间都在解决(编译时间太长了),这个是FFmpeg软件安装和配置失败造成的,具体原因在配置时候未设置成正确的共享参数(编译生成动态链接库需要参数共享)

安装编译配置FFmpeg

step1:依赖项

安装FFmpeg的依赖项:yasm,libx264(依赖yasm),libfaac,libmp3lame,libtheora,libvorbis,libxvid,libxext,libxfixes.命令如下:
安装yasm

apt-get install yasm 
  • 1

安装libx264

aptitude install libx264-dev 
  • 1

安装其余软件

sudo aptitude install libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev  libxext-dev libxfixes-dev
  • 1

step2:下载编译配置

下载FFmpeg:官网网址,解压,进入到解压的目录
编译(很重要,这个配置错了会导致上面提到编译opencv时的错误)

./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis  --enable-nonfree --enable-pic --enable-shared
  • 1

(后面的–enable-nonfree –enable-pic –enable-shared很重要)
使用prefix指定安装路径,则需要/ect/profile配置文件修改对应的路径配置,让系统正确找到FFmpeg的安装路径:(简单的安装方法是不指定安装路径,就不用配置相关路径,如果一直有错误,可以尝试不指定安装路径来安装,但这样或许对之后删除管理较为麻烦)

vi /etc/profile
  • 1

在文件末尾加上两句话:

export FFMPEG_HOME=/usr/local/ffmpeg 
export PATH=$FFMPEG_HOME/bin:$PATH
  • 1
  • 2

使生效

source profile
  • 1

step3:安装

make
make install
  • 1
  • 2

安装之后在/usr/local/ffmpeg会看到有三个目录:bin 执行文件目录,lib 静态,动态链接库目录,include 编程用到的头文件

step4:检查安装和配置是否正确

ffmpeg -version 
  • 1

出现如下指令表示安装正确(configuration的配置一定要一致):

configuration: --enable-nonfree --enable-pic --enable-shared
libavutil      55. 28.100 / 55. 28.100
libavcodec     57. 48.101 / 57. 48.101
libavformat    57. 41.100 / 57. 41.100
libavdevice    57.  0.101 / 57.  0.101
libavfilter     6. 47.100 /  6. 47.100
libswscale      4.  1.100 /  4.  1.100
libswresample   2.  1.100 /  2.  1.100
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意:
1:为了防止执行程序找不到库文件,可以将/usr/local/ffmpeg/lib目录设置到LD_LIBRARY_PATH环境变量
2:若出现error while loading shared libraries: libavdevice.so.52的错误修改/etc/ld.so.conf 在最后一行加上/usr/local/ffmpeg/libldconfig -v,并修改 /usr/local/ffmpeg/lib目录下的文件权限为777
3:在ubuntu 上安装ffmpeg后,如果你命令ffmpeg不管用,把编译后文件中/usr/local/ffmpeg/bin/ffmpeg文件复制到/usr/ bin当中

安装Opencv

step1:下载:官网,解压到opencv

step2:安装依赖项

sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils 
  • 1

ffmpeg已经安装过,无需再装

step3:创建编译目录,编译

cd ~/opencv
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

编译过程时间较长

step4:测试,参考文献[5].

#python调用opencv模块

step1:安装python-opencv,numpy

sudo apt-get install python-opencv
sudo apt-get install python-numpy
  • 1
  • 2

step2:测试调用

python
import cv
  • 1
  • 2

如果不报错,说明成功调用.

参考文献:
[1]:stackoverflow错误回答:http://stackoverflow.com/questions/25539034/opencv-make-fails-recompile-with-fpic
[2]:http://my.oschina.net/zhangjie830621/blog/469909
[3]:http://blog.youkuaiyun.com/lwsas1/article/details/51131626
[4]:http://blog.youkuaiyun.com/redstarofsleep/article/details/45092145
[5]:http://www.linuxidc.com/Linux/2015-05/116960.htm

--------------------- 本文来自 流星逐月 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/u010106759/article/details/51931815?utm_source=copy

 

转自:https://blog.youkuaiyun.com/u010106759/article/details/51931815?locationNum=4&fps=1

relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object; recompile with /usr/bin/ld: ./comlib/ffmpeg/lib/libavcodec.a(allcodecs.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC ./comlib/ffmpeg/lib/libavcodec.a: error adding symbols: Bad value collect2: error: ld ret 阅读详情

相关推荐

edk2编译BaseTools出错relocation R_X86_64_32 against `.rodata.str1.1‘ can not be used when making a PIE

/usr/bin/ld: ../libs/libCommon.a(CommonLib.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIE

kkklebron的博客 1247

全网首发:relocation R_X86_64_PC32 against symbol can not be used when making a shared object recompile

网上所有教程,都说加-fPIC。大多情况下有用,个别情况下没用。比如编译FFmpeg。

柳鲲鹏 9524

用化学方法nmp溶剂从佳能cmos传感器上剥离拜耳矩阵和微透镜

将光刻胶暴露于 NMP 溶剂中 10-15 分钟,并进行轻微的机械搅拌,将溶解的光刻胶从基材表面带走,即可去除大部分光刻胶,之后再进行第二次溶剂浴,以洗去微量含有光刻胶的溶剂。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。在我看来,这是必读的;

qq_40247880的博客 1473

《视觉SLAM十四讲》错误记录

ubantu22.04 错误记录

每天进步一点点 2926

深入理解搜索引擎——搜索评价指标

    搜索引擎,在做好query理解、索引召回以及排序模型之后,就能直接推上线了吗?答案是否定的,还需对其性能和质量进行评测。性能无非是对时间和空间的运行效率作评测,不细讲,今天讲讲搜索引擎的质量评测。通过质量评测,可根据评测结果不断的进行改进和研究,也可以验证搜索引擎在真实环境中运行时的实际效果。因此,搜索引擎的质量评测对于整个系统的研制和发展是至关重要的。     那么有哪些指标可以评估搜索引擎的结果质量呢?最广为人知的

我是药老的博客 4485

AIDD机器学习深度学习药物发现与设计教程总结

AIDD(AI Drug Discovery & Design):是近年来非常火热的技术应用,且已经介入到新药设计到研发的大部分环节当中,为新药发现与开发带来了极大的助力。倾向于机器对数据库信息的自我学习,可以对数据进行提取和学习,一定程度上避免了化合物设计过程中的试错路径,同时还会带来很多全新的结构,为药物发现打破常规的结构壁垒。覆盖了机器学习和深度学习,能与新药研发相结合并实质性的应用到靶点预测、高通量筛选、药物设计、药物的ADMET性质预测等;且算力方面,由早期应用于药物发现领域的决策树、随机

wutianlin0723的博客 6814

【tx2】——动态库编译注意事项

1. 在ubuntu上编译成库,然后把库so直接copy到tx2用于编译 可能问题: ubuntu上编译的库在tx2上(arm平台上)能否直接使用? 结果: /usr/bin/ld: skipping incompatible /home/ginger/chenjun/libs_make/lib/libmegengine.so when searching for -lmegengine /usr/bin/ld: cannot find -lmegengine collect2: error: ld r

怡宝2号 552

Android13 CarPowerManagementService启动流程分析

在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。

liuning1985622的博客 956

neon DL accelerate package

1.Ubuntu编译问题 /usr/bin/ld: /usr/local/lib/libavformat.a(allformats.o): relocation R_X86_64_32 against `ff_a64_muxer' can not be used when making a shared object; recompile with -fPIC 解决方法: 重新编译下载的ff

风采之子的专栏 690

APB Timer验证环境搭建——学习笔记(6)

(1)为RELOAD VALUE配置初始值32'h8000_0000,设定边界值32'h4000_0000,可以看到减到想要的边界值的时候,counter重新加载RELOAD VALUE,重新开始计数;这根线,统计等待到中断的次数,与理论值做。(2)设定Reload value。(1)由于counter。recount总共次数;

qq_41651535的博客 497

从泛光成像到可寻址扫描:Flash激光雷达的车规级优势与技术演进

Flash激光雷达凭借固态架构优势成为自动驾驶感知技术的重要发展方向。该方案无机械部件,具备抗振动、长寿命等特点,同时CMOS工艺带来显著成本优势。但传统泛光式存在能量弥散问题,难以兼顾大视场和远距离探测。可寻址扫描技术通过分区点亮VCSEL阵列,有效提升局部能量密度,在保持固态可靠性的同时突破性能瓶颈。这种"电子扫描+分区点亮"的混合架构,使Flash激光雷达有望实现大视场、远距离、高可靠和低成本的多重突破,推动自动驾驶技术发展。

致力于lidar应用开发 233

Ubuntu18.04源码编译OpenCV4.4.0

又一次在Ubuntu18.04下编译OpenCV 官网下载OpenCV4.4.0和opencv_contrib的源码就不多说了,依赖库的安装也见官方安装教程 编译过程如下,首先 cd ~/opencv mkdir build cd build 接下来按照自己的要求配置OpenCV cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DOPENCV_GENERATE_PKGCONFIG=ON \ -DOPENCV_E

X-funbean的博客~ 2516

Open3D点云数据处理(六):点云、mesh可视化(Visualizer类)

本文介绍了Open3D中Visualizer类可视化几何对象的方法,给出了常用参数解释和代码示例。

孙悟空 3024

ubuntu16编译opencv3.1出现/usr/bin/ld: /usr/local/lib/libavcodec.a(allcodecs.o): relocation R_X86_64_32 a

问题如下 解决方法: 1.下载FFmpeg ; http://www.ffmpeg.org/download.html#releases 2.编译步骤如下 ./configure --enable-nonfree --enable-pic --enable-shared make make install ...

Pandas_xxx的博客 3111

01 Python学习总结:Python简介及入门

Python 是一门高级编程语言,以其简洁、易读和强大的功能而广受欢迎。它适用于多种应用场景,包括 Web 开发、数据分析、人工智能、自动化脚本等。以下是 Python 的简介及入门知识总结,帮助你快速了解并开始学习 Python。

数据知道的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

libavcodec.a relocation R_X86_64_PC32

查找到的都是在编译 ffmpeg 的时候 需要在./configure --enable-pic --extra-cflags="-fPIC " ,但是添加后依旧会出现这些链接错误,或者可以在cmakelist 文件中加入 set(CMAKE_SHARED_LINKER_FLAGS "-Wl, -Bsymbolic")如果是qt 的工程,需要在.pro 中加入。

LEIZAIYANBIAN的博客 594

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

relocation R_X86_64_PC32 against symbol ff_pw_9 can not be used when making a shared object

具体错误: /usr/bin/ld: /home/quantum6/build_libs/lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Bad value collect2: error: ld

柳鲲鹏 2946

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

CentOS 7.1 编译opencv3.1+ffmpeg

项目需要在服务器上带ffmpeg编译opencv 3.1,之前只在windows上用过opencv,编译过一次痛苦的很,所以这次做好了充分心理准备。 编译ffmpeg 1.首先去下载源码,放在/ffmpeg目录下 2.修改config,因为没sudo权限,所以默认安装路径要改,编译opencv要调用动态库,所以要加shared项(很坑啊第一次没加重新编的) ./configure

byplane的博客 4603

relocation Rx86_64_32 against'.rodata.str1.1'can not be used when making a shared object

在ubantu下,buildroot在编译创建根文件系统时遇到relocation Rx86_64_32 against’.rodata.str1.1’can not be used when making a shared object;recompile with -fPIC 如下图所示: 在这里插入图片描述 这是我在用buildroot 来制作根文件系统的时候出现的问题,知道是fPIC的问题...

qq_40190959的博客 2949

Ubuntu20.04安装opencv4

描述 Ubuntu20.04安装opencv4的步骤 由于部分步骤是已经OK的,所以只是记录在这里,并将一些问题的解决方案记录在这里,以后会更新完整干净的步骤 步骤 下载opencv4.5.5 及 opencv_contrib4.5.5 我下载到的位置是Downloads,可以在Downloads目录下完成解压 cd Downloads 编译opencv,并将opencv_contrib设置为外部包同时进行编译(在命令中你会看到与opencv4.5.5同级目录下opencv_contrib4.

weixin_42156097的博客 2358

relocation R_X86_64_32 against `.rodata.str1.1‘ can not be used when making a shared object;

libconfig.a: error adding symbols: Bad value

Pou光明的博客 1904

解决方法/usr/bin/ld: /usr/local/lib/liblua.a(lapi.o): relocation R_X86_64_32 against `luaO_nilobject_'

错误为: /usr/bin/ld: /usr/local/lib/liblua.a(lapi.o): relocation R_X86_64_32 against `luaO_nilobject_' can not be used when making a shared object; recompile with -fPIC   /usr/local/lib/liblua.a: could

sinat_24820331的博客 1万+

relocation R_X86_64_32S against -fPIC

/usr/bin/ld: src/common/common.o: relocation R_X86_64_32S against `.data' can not be used when making a shared object; recompile with -fPIC src/common/common.o: error adding symbols: Bad value colle

digent的专栏 6689

学习笔记:relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;

解决多个.a静态库,链接成一个.so动态库出现:  relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; 的错误。 我的总目标是:写一个mainApi.cpp的文件,这个文件提供API给外部用户使用。mainApi.cpp需要依赖其他模块生成的静态库(在lib文件下)。将mainApi.cpp编译 链接成一个.so动态库共外部使用。在编译的时候出现relocation R_X

木牛的博客 1万+

ffmpeg启用lib264编译错误relocation R_X86_64_32 against .rodata‘ can not be used when making a shared obj

错误信息 /usr/bin/ld: libavcodec/mqc.o: relocation R_X86_64_32 against .rodata' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: libavcodec/mqcdec.o: relocation R_X86_64_32S against undefined symbolff_mqc_qe’ can not be used when

my_live_123 2793
上一篇: 在Ubuntu 16.04 中安装配置 Opencv 3.1 和 Python 2.7 / Python 3.5
下一篇: Ubuntu 14.04 更换阿里云源
鱼公子哟西
博客等级 码龄14年 17粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值