1.7-1.8动态库加载失败的原因和解决办法
目录
1.动态库和静态库的原理
2.动态库加载失败的原因
3.解决方法
3.1 DT_RPATH段
3.2将libcalc.so的路径加入到环境变量LD_LIBRARY_PATH中
3.3将libcalc.so的路径加入到/etc/ld.so.cache文件列表中
3.4将libcalc.so直接放到/lib/、/usr/lib目录中
1.动态库和静态库的原理
GCC进行链接时,会把静态库中的代码放到可执行程序中。但是对于动态库,不会把代码放到可执行程序中,只会把一些相关信息(如动态库的名字等)放到可执行程序中。运行的时候,如果用到了动态库中的内容,在可执行程序中是找不到的。导致错误出现。
注:执行时如果用到了动态库中的API,动态库会被加载到内存中。
2.动态库加载失败的原因
下面通过ldd命令查看main的动态库依赖关系:
可以看到列出了用到的4个动态库。
上面提到的动态载入器eld-linux.so即最后一个动态库。
因为动态载入器在DT_RPATH段、环境变量LD_LIBRARY_PATH等中找不到libcalc.so的绝对路径,所以会报错。
3.解决方法
将libcalc.so的路径加入到DT_RPATH段、LD_LIBRARY_PATH、/etc/ld.so.cache文件列表或者将libcalc.so直接放到/lib/、/usr/lib目录中
3.1 DT_RPATH段
DT_RPATH段我们改变不了,直接下一个。
3.2将libcalc.so的路径加入到环境变量LD_LIBRARY_PATH中
方式1:在终端直接加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wcj/projec/lesson4/library/lib
即先获取原来的环境变量,再在后面加上动态库的路径
但是该终端关闭后,值之前加的环境变量就失效了,打开新终端之后又得重新弄。
下面讲永久配置,分为两种方式:用户级别的配置和系统级别的配置
方式2:永久配置---用户级别
打开.bashrc文件:
(vi中,shift+G可以跳到最后一行,小写的o可以向下插入一行)
在最后一行插入:
保存之后,使修改生效:
第一个点相当于source,也可以写成“source .bashrc”
回到原来的目录,发现可以运行:
方式3:永久配置--系统级别
配置之前,先把上面配置的删掉。并重新打开一个终端,防止上一步潜在的影响。
打开/etc/profile文件:
在最后一行添加:
使修改生效:
回到原来的目录中,可以执行,如下图:
3.3将libcalc.so的路径加入到/etc/ld.so.cache文件列表中
先将上面的修改删除,再重新打开一个终端
先尝试打开/etc/ld.so.cache:
发现不能编辑,如下图:
既然不能直接修改这个文件,那就间接修改:
添加动态库的路径:
保存之后,更新:
回到原来的目录,可以执行,如下图:
3.4将libcalc.so直接放到/lib/、/usr/lib目录中
最后一种不建议使用。因为这两个目录中保存的是系统的库文件,防止对其误操作。
参考:牛客网 C++高薪求职项目《Linux高并发服务器开发》1.7/1.8动态库加载失败的原因和解决
专属优惠链接:
https://www.nowcoder.com/courses/cover/live/504?coupon=AvTPnSG
1.7-1.8动态库加载失败的原因和解决办法相关推荐
- Github css加载失败,样式混乱解决办法
github被墙的解决办法 Github css加载失败,样式混乱解决办法 打开cmd,输入 nslookup github.com 8.8.8.8 ,下面就会显示出github的服务器地址列表 ...
- 查看开源操作系统ReactOS源码,解决dll库动态库加载失败问题(调用LoadLibrary加载失败)
目录 1.动态加载dll库去调用库中的函数 1.1.调用系统dll库中未公开的接口
- (原创)easyui 页面加载慢的原因及解决办法
Easyui 框架简单.易用,且功能丰富,可以满足大多的管理类网站开发的要求.但越开发到后面的时候, 总感觉页面加载越来越慢,有时打开一个页面需要好几秒甚至十几秒,这种体验是非常糟糕的. 刚开始还以 ...
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )
文章目录 前言 一.加载 libnattive.so 动态库 二. libnattive.so 动态库启动 三. pthread_create 线程开发 四. 线程执行函数 前言 libbridge. ...
- 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )
文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- ELF动态库加载技术
库用于将相似函数打包在一个单元中.Linux支持两种类型的库:静态库(在编译时静态绑定到程序)和动态库(在运行时绑定到程序).Linux系统使用的动态库是ELF格式,后缀名为so. 1 加载 动态库内 ...
- 【linux】程序找不到动态库.so的解决办法|查看.so动态库信息|.so动态库加载顺序
目录 找不到.so解决方法 方法一:添加环境变量 方法二:复制so文件到lib路径 方法三:(推荐)添加ldconfig寻找路径 方法四:在编译目标代码时指定该程序的动态库搜索路径 让程序在本目录找到 ...
- centos8安装dm8,动态库加载成功后导致undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b fatal: Could not read
centos8安装dm8,动态库加载成功后导致undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b fatal: Could not read ...
- Linux动态库加载函数dlopen源码梳理(一)
下载了libc的源码,现在就开始libc源码的学习,最近了解到了linux动态库的相关知识,那么就从linux动态库加载函数dlopen进行梳理学习吧. 如果还没下载libc源码,可通过 https: ...
最新文章
- 解决pandas读取含有中文路径下的文件编码错误解决
- python是一个免费开源的软件吗_6个最佳的开源Python应用服务器
- vscode设置eslint检验无效_大整理!JavaScript开发者的27个神奇VSCode工具
- 你和PPT高手之间,就只差一个iSlide,新版本支持WPS、Office
- jsp学习之路之Myeclipse部署tomcat服务器并实现Hello World一个小网页
- 抖音回应李小璐PGone视频曝光:草稿视频不会上传到后台
- Linux svn服务器搭建
- 软件设计师2004年5月下午试题6(C++ 数组下标检测)
- mysql 存储过程:提供查询语句并返回查询执行影响的行数
- 【Python】使用torrentParser1.02对单文件torrent的分析结果
- 剖析车联网的完美形态,机器人化还是智能交通?
- 前端——》antdv根据拼音过滤select选择器的选项
- Spring boot 集成极光推送
- ui设计 原则 要素_ui设计原则
- JAVA社区疫情防控系统毕业设计 开题报告
- 【误码率仿真】基于matlab LDPC编译码误码率仿真【含Matlab源码 2079期】
- 奇妙的裴波那契数列和黄金分割
- 傲天AC EAG误配置导致Portal推送失败案例
- three.js快速入门和实战
- linux使用单核_如何使用Linux还原单核计算机
热门文章
- 知识的不足--维修同事macbook pro有感
- 云服务器平台销售系统,vmware云服务器平台销售系统
- 小学生四则运算练习的编程 软件工程
- PostgreSQL语句大全
- 苹果:无须用户同意,App 涨价时自动续订,网友吐槽“App Store 毒性越来越大”...
- 搭建阿里云 TiDB 的灾备,让我安欣睡个好觉
- android layout_margintop,layout_margintop
- 系统服务器 lis6.0,LIS系统条形码生成接口说明(Service)
- 我太生气了,程序员赚的那点钱算个毛啊!
- 解决Error starting ApplicationContext.To display the conditions report re-run your application xxx的问题