在ubuntu下代码编译通过的情况下,经常出现运行时加载动态库出错的情况。这些问题很琐碎,不具备任何技术含量,纯属耽误时间,这也是linux系统的通病,花里胡哨,故弄玄虚。

为了减少初学者在这种无意义的事情上浪费大量的时间,本文对这个问题提供一点解决方案,这些方案都是在Ubuntu18.04上测试过的,希望对需要者有所帮助。

这里使用的是最小化的代码,主程序是mytest,其运行时需要调用libtest.so, 成功调用后输出信息:Hello Shared Library!

否则会抱怨找不到动态库。

本文的工作目录为/home/eric/dlltest

error while loading shared libraries:libtest.so: cannot open shared object file: No such file or directory

这就对了,符合本文的预期,libtest.so已经被移除了,所以会报错。

下面将libtest.so拷贝回来。

有:

可见这样mytest就找到了动态库libtest.so。

再次将libtest.so移动到/home/eric/lib/下面,有:

这时候,

dlltest下面只有mytest执行文件,继续测试有:

错误继续出现,这样就对了。下面想办法能够让mytest程序能够找到动态库libtest.so。

第一种方法:

使用

可以看到,动态库找到了,然而这种方法关闭了窗口之后就没效果了。

重启命令窗口后问题继续出现,

这时候需要

第二种方法,修改.bashrc文件

进入到/home/eric下(eric是本文在ubuntu上的用户名)

在.bashrc文件末尾加入:

export LD_LIBRARY_PATH=/home/eric/lib:$LD_LIBRARY_PATH

也就是上图第121行,保存退出后,运行source .bashrc

可见/home/eric/lib 已经在库路径里面了。

这是进入到/home/eric/dlltest目录:

可见,这次动态库路径是对的,为了保险起见,关闭窗口,重新打开,有:

可见还是可以找到的。

下面将export LD_LIBRARY_PATH=/home/eric/lib:$LD_LIBRARY_PATH 从/home/eric/.bashrc文件中注释掉。

可见还是找的到动态库,这不科学!

查看库路径果然/home/eric/lib还在,这时候需要运行下source .bashrc,可以看到库变量改变了。

不过虽然是库变量改变了,但是还是系统找得到动态库libtest.so,只好关闭窗口重启了:

这次是真的找不到了。

linux系统下就是经常发生这种非常微妙的小插曲,当你以为搞定了,实际上却是错误的结论,好在本文用了一个最小出错模型,有大量的时间可以耗下去,如果在生产环境,这种代价是承受不起的。

这样第二种方法也测试成功了。下面介绍第三种方法。

第三种方法,修改/etc/ld.so.conf文件

本文的/etc/ld.so.conf内容为:

加上路径/home/eric/lib/

有:

修改后保存。

继续测试mytest,可见还是找不到库。

这是需要运行sudo ldconfig:

本文运行的当前目录是/home/eric/dlltest

可见sudo ldconfig命令不挑当前目录。

为了保险起见,关闭窗口,重新启动:

可见还是可以找得到的,说明此方法可行。

继续修改etc/ld.so.conf文件,删除路径/home/eric/lib/,并运行sudo ldconfig等有:

说明又找不到了,好的,符合预期,重启窗口试一下,虽然不大有可能出现反常,但是怕了,必须验证!

还是没找到,说明的确第三种方法是起作用的。

下面介绍第四种方法:

第四种:在/etc/ld.so.conf.d/目录下添加youtest.conf文件

文件内容为/home/eric/lib/

也就是动态库libtest.so的所在路径。

可以看到youtest.conf文件产生了。

这是运行mytest测试一下:

没找到,这符合预期,还没有使用sudo ldconfig命令

可见,这次文件youtest.conf起作用了,文件名youtest.conf是为了避嫌,也就是这个可以和mytest不一样,当然后缀名是需要.conf就行。

再次重启窗口,

可见还是可以找得到动态库。

说明这种方法也是成功的。

综上所述,本文介绍了找动态库的四种方法,也许方法可能会有千千万万种,但是本文不感兴趣,有了这几种方法后,初学者容易有获得感和幸福感,从而有进一步学习的勇气和道路自信,其它的方法都可以触类旁通,进而获得更大意义上的自由。

应该说,本文的环境是WSL下的ubuntu18.04,在其它系统上可能会产生一些细微的差异,需要灵活运用。

后面有时间的话还会有些类似的文章,扫清这种没有任何技术含量的学习障碍,从而使初学者能够将有限的时间放到有价值的事情上去。

tableview动态修改和删除_Ubuntu加载动态库失败的解决方案相关推荐

  1. IDEA 加载xml文件失败,解决方案

    问题 在IDEA中,第在src/main路径下添加了xml,使用如下代码加载xml文件时: String path = JsoupDemo.class.getClassLoader().getReso ...

  2. Android中Glide加载Https图片失败的解决方案(记录)

    1.在Application中添加如下方法: public static void handleSSLHandshake() {try {TrustManager[] trustAllCerts = ...

  3. Linux系统程序运行时加载动态库路径顺序

    程序运行时加载动态库路径顺序(Linux) 在linux系统中,如果程序需要加载动态库,它会按照一定的顺序(优先级)去查找: 链接时路径(Link-time path)和运行时路径(Run-time ...

  4. macOS下加载动态库dylib报code signature invalid错误的解决办法

    一.现象描述 在macOS上搞开发也有一段时间了,也积攒了一定的经验.然而,今天在替换工程中的一个动态库时还是碰到了一个问题.原来工程中用的是一个静态库,调试时发现有问题就把它替换成了动态库.这本来没 ...

  5. 动态加载so库的实现方法与问题处理

    前一阵项目上要求实现App的so库动态加载功能,因为这块本来就有成熟的方案,所以一般的实现没什么难度.可是到项目测试中,才发现有不少意料之外的情况,需要一一针对处理,故此记录一下具体的解决办法,以供后 ...

  6. vue3加载动态图片

    vue3加载动态图片 一.动态加载图片 使用new URL(url, import.meta.url) <template><div class="home"&g ...

  7. vc6.0中用GDIPlus实现加载动态gif图片(非MFC实现)

    今天心情很嗨皮,原因是花了5块钱买了一张刮刮彩,给中了100快,喜悦感可谓是油然而生吧,好了进入正题吧.关于GDI+的介绍在这里就不谈了,总之相比GDI确实方便了太多,比如首先GDI仅仅支持bmp格式 ...

  8. android 加载三方so的方法_Android开发教程之动态加载so库文件的方法

    Android开发教程之动态加载so库文件的方法,我想对于静态加载 so 库文件,大家都已经很熟悉了,这里就不多说了.在 Android 开发中调用动态库文件(*.so)都是通过 jni 的方式,而静 ...

  9. linux直接运行程序加载动态库失败,扣丁学堂Linux培训详解程序运行时加载动态库失败解决方法...

    今天扣丁学堂Linux培训老师给大家介绍一下关于Linux程序运行时加载动态库失败的解决方法,希望对同学们学习有所帮助,下面我们一起来看一下吧. Linux下不能加载动态库问题 当出现下边异常情况 . ...

最新文章

  1. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享_PHP教程
  2. ubuntu远程登陆windows
  3. 童装这门好生意,救得了森马吗?
  4. 神策数据荣膺 2017 企业创新典范、最佳青年榜样双殊荣
  5. Python3 数据结构:列表List中的方法
  6. junit junit_使用junit做其他事情
  7. OCR完整技术栈10天掌握!教程完全开源,更有产学研大佬们联合授课!
  8. docsify+github/gitee搭建个人在线文档
  9. DealComment (注释处理工具)
  10. nginx入门之编译安装
  11. r(AB)=r(B)则方程组ABX=0与Bx=0有完全相同的解
  12. 《LabVIEW FPGA开发宝典》第9章:利用树莓派Linux RT+FPGA PCIe实现国产化RIO
  13. 美国地名大全(美国城市名称英文、中文)
  14. wordpress电商独立站模板
  15. GNSS-SINEX文件格式简介
  16. java学习---Nginx 反向服务代理
  17. python 四象限图_方法:高效处理工作的四象限图
  18. TCP Congestion性能测试分析
  19. python学习 day51之js续集
  20. 作业1:C#使用委托实现信用卡用户定时还款功能

热门文章

  1. 14 篇论文为你呈现「迁移学习」研究全貌 | 论文集精选 #04
  2. PaddlePaddle飞浆开启人工智能新时代
  3. ACM-ICPC 2017 Asia Nanning
  4. python中os.listdir()的使用和文件批量重命名方法
  5. echarts 默认显示图例_echarts图例组件点击显示功能(默认功能点击消失)
  6. flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...
  7. googlehelper手机版ios_二次元漫画控iOS苹果手机版下载v1.0.0下载|免费二次元漫画控iOS苹果手机版下载绿色版...
  8. python function terminated_calibre 打不开也转不了 并且出现错误 mobi转docx
  9. thinkphp url去掉index.php,thinkphp 去掉URL 里面的index.php(?s=)
  10. [NOI2011]阿狸的打字机