默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。

  1、首先打开/etc/ld.so.conf文件

  2、加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。

  3、保存后,在命令行终端执行:/sbin/ldconfig -v;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。

  经过以上三个步骤,"error while loading shared libraries"的问题通常情况下就可以解决了。

  如果运行应用程序时,还是提示以上错误,那就得确认一下是不是当前用户在库目录下是不是没有可读的权限。像我遇到的问题就是,从别的机子拷贝了一些.so动态库,然后用root权限放到了/usr/local/lib中(普通用户没有对该目录的写权限),然后切换用户运行程序时,始终提示找不到.so库,一直以为是我配置有问题,结果是因为权限原因,那些我用root权限增加到/usr/local/lib中的.so文件对于普通用户而言,是没有访问权限的,所以以普通用户运行程序,当需要链接.so库时,在/usr/local/lib中是查找不到的。

  其实,对于由普通用户自己编译生成的.so库文件,比较好的做法是将这些.so库文件的路径用export指令加入到~/.bash_profile中的LD_LIBRARY_PATH变量中,LD_LIBRARY_PATH是程序运行需要链接.so库时会去查找的一个目录,~/.bash_profile是登陆或打开shell时会读取的文件,这样,每次用户登录时,都会把这些.so库文件的路径写入LD_LIBRARY_PATH,这样就可以正常地使用这些.so库文件了。

最新文章

  1. Stanford CS1 Compilers PA2J notes
  2. ES6中Arguments和Parameters用法解析
  3. 关于Function.prototype.bind
  4. mybatis 关联查询 association
  5. 领域驱动开发推荐代码示例 — Microsoft NLayerApp
  6. backbone extend 源码分析
  7. WPF之UseLayoutRounding和SnapsToDevicePixels
  8. LocalContainerEntityManagerFactoryBean
  9. COJ 0579 4020求次短路的长度
  10. javascript写贪吃蛇游戏(20行代码!)
  11. Python数据分析(一): ipython 技巧!
  12. 认识RabbitMQ交换机模型
  13. Vue之状态管理(vuex)与接口调用
  14. 【redis专题(3)】命令语法介绍之link
  15. Scala中的协变,逆变,上界,下界等
  16. D - Power Tower欧拉降幂公式
  17. Latex 循环插图、文件名包含空格
  18. 使用Mongo dump 将数据导入到hive
  19. 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
  20. 【转】亲测plsql Developer配置免安装oralce客户端步骤

热门文章

  1. Netsarang
  2. JAVA-Proxy 代理
  3. js和jQuery中的事件绑定与普通事件
  4. Eclipse xml中自动提示,添加 dtd或xsd依赖
  5. golang sort包使用
  6. typdef void(*fun)(void)笔记【函数指针/typdef函数指针】
  7. IO流--与properties集合配合使用
  8. 如何更改vs2013中git的远程仓库url地址
  9. 四.HashSet原理及实现学习总结
  10. WEUI Picker不切换数据