我是靠谱客的博主 寒冷歌曲,最近开发中收集的这篇文章主要介绍libxxx.so.0: cannot open shared object file:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

这个问题是实际工作中遇到,不过为了便于描述作了些改变,就不使用工作中用到的库名,c文件名……

本次问题会用到的文件:

1.libtest.so                         #动态库文件
2.main.c                             #动态库中函数调用点


编译:

gcc libtest.so main.c -Wall

运行及错误信息:

env LD_LIBRARY_PATH=. ./a.out

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

WHY
    为什么会说libtest.so.0而不是libtest.so找不到,编译链接的时候都是libtest.so,可执行文件里面怎么嵌入的是libtest.so.0

当时的解决方法:  

 ln -s libtest.so libtest.so.0

引起这个问题的真正原因:
    要想明白可执行文件里面为什么没有使用动态库的文件名,就要说明动态库里面一个神奇的属性 SONAME,如果动态库设置了SONAME,那么在静态链接阶段会将 SONAME嵌入到可执行文件中,而不会使用真实文件名称,同时后面的动态链接器
在运行时也会使用这个SONAME来搜索库。

真相大白: 

$ objdump -p libtest.so | grep SONAME
  SONAME               libtest.so.0

转载于:https://my.oschina.net/guonaihong/blog/295339

最后

以上就是寒冷歌曲为你收集整理的libxxx.so.0: cannot open shared object file:的全部内容,希望文章能够帮你解决libxxx.so.0: cannot open shared object file:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部