目录

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动态库加载失败的原因和解决办法相关推荐

  1. Github css加载失败,样式混乱解决办法

    github被墙的解决办法 Github css加载失败,样式混乱解决办法 打开cmd,输入  nslookup github.com 8.8.8.8  ,下面就会显示出github的服务器地址列表 ...

  2. 查看开源操作系统ReactOS源码,解决dll库动态库加载失败问题(调用LoadLibrary加载失败)

    目录 1.动态加载dll库去调用库中的函数 1.1.调用系统dll库中未公开的接口

  3. (原创)easyui 页面加载慢的原因及解决办法

    Easyui  框架简单.易用,且功能丰富,可以满足大多的管理类网站开发的要求.但越开发到后面的时候, 总感觉页面加载越来越慢,有时打开一个页面需要好几秒甚至十几秒,这种体验是非常糟糕的. 刚开始还以 ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )

    文章目录 前言 一.加载 libnattive.so 动态库 二. libnattive.so 动态库启动 三. pthread_create 线程开发 四. 线程执行函数 前言 libbridge. ...

  5. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  6. ELF动态库加载技术

    库用于将相似函数打包在一个单元中.Linux支持两种类型的库:静态库(在编译时静态绑定到程序)和动态库(在运行时绑定到程序).Linux系统使用的动态库是ELF格式,后缀名为so. 1 加载 动态库内 ...

  7. 【linux】程序找不到动态库.so的解决办法|查看.so动态库信息|.so动态库加载顺序

    目录 找不到.so解决方法 方法一:添加环境变量 方法二:复制so文件到lib路径 方法三:(推荐)添加ldconfig寻找路径 方法四:在编译目标代码时指定该程序的动态库搜索路径 让程序在本目录找到 ...

  8. 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 ...

  9. Linux动态库加载函数dlopen源码梳理(一)

    下载了libc的源码,现在就开始libc源码的学习,最近了解到了linux动态库的相关知识,那么就从linux动态库加载函数dlopen进行梳理学习吧. 如果还没下载libc源码,可通过 https: ...

最新文章

  1. 解决pandas读取含有中文路径下的文件编码错误解决
  2. python是一个免费开源的软件吗_6个最佳的开源Python应用服务器
  3. vscode设置eslint检验无效_大整理!JavaScript开发者的27个神奇VSCode工具
  4. 你和PPT高手之间,就只差一个iSlide,新版本支持WPS、Office
  5. jsp学习之路之Myeclipse部署tomcat服务器并实现Hello World一个小网页
  6. 抖音回应李小璐PGone视频曝光:草稿视频不会上传到后台
  7. Linux svn服务器搭建
  8. 软件设计师2004年5月下午试题6(C++ 数组下标检测)
  9. mysql 存储过程:提供查询语句并返回查询执行影响的行数
  10. 【Python】使用torrentParser1.02对单文件torrent的分析结果
  11. 剖析车联网的完美形态,机器人化还是智能交通?
  12. 前端——》antdv根据拼音过滤select选择器的选项
  13. Spring boot 集成极光推送
  14. ui设计 原则 要素_ui设计原则
  15. JAVA社区疫情防控系统毕业设计 开题报告
  16. 【误码率仿真】基于matlab LDPC编译码误码率仿真【含Matlab源码 2079期】
  17. 奇妙的裴波那契数列和黄金分割
  18. 傲天AC EAG误配置导致Portal推送失败案例
  19. three.js快速入门和实战
  20. linux使用单核_如何使用Linux还原单核计算机

热门文章

  1. 知识的不足--维修同事macbook pro有感
  2. 云服务器平台销售系统,vmware云服务器平台销售系统
  3. 小学生四则运算练习的编程 软件工程
  4. PostgreSQL语句大全
  5. 苹果:无须用户同意,App 涨价时自动续订,网友吐槽“App Store 毒性越来越大”...
  6. 搭建阿里云 TiDB 的灾备,让我安欣睡个好觉
  7. android layout_margintop,layout_margintop
  8. 系统服务器 lis6.0,LIS系统条形码生成接口说明(Service)
  9. 我太生气了,程序员赚的那点钱算个毛啊!
  10. 解决Error starting ApplicationContext.To display the conditions report re-run your application xxx的问题