关于so库的一些疑惑
Tofloor
poster avatar
176******80
deepin
2017-09-11 05:05
Author
在使用linux的时候碰到好多因为so库版本而导致软件无法启动的问题


比如Android Studio集成的AVD,Cisco Packet Tracer 7.1,两者都自带了一些so库,但貌似和系统版本不一致,导致无法启动,网上搜到的解决办法就是把自带的so库文件删了,或者将其软链接到系统so库文件


我对so库这方面不太了解,但是感觉既然软件自带了一些so,那肯定是兼容该程序的,启动的时候也肯定优先加载自带的,又为啥为导致无法启动呢?非要把自带的删掉转而加载系统的so库才行?

在linux系统编程方面我是小白,忘各位大大解惑一下
Reply Favorite View the author
All Replies
avatar
kaile
deepin
2017-09-11 05:33
#1
不懂帮顶
Reply View the author
avatar
woodelf
deepin
2017-09-11 06:00
#2
动态库的加载取决于几个变量:
1、软件编译时候指定的rpath参数。
2、用户的LD_LIBRARY_PATH设置。
3、/etc/ld.so.conf文件和/etc/ld.so.conf.d目录中指定的库路径。
4、默认的/lib{32,64}和/usr/lib{32,64}目录。
通常不开源的软件自己会带有所有必要的动态库(例如steam),如果程序无法正确加载自带的so,大概是编译时候没有做好设置。不过我倒是没遇到过这问题。
Reply View the author
avatar
176******80
deepin
2017-09-11 06:24
#3
https://bbs.deepin.org/post/145345
动态库的加载取决于几个变量:
1、软件编译时候指定的rpath参数。
2、用户的LD_LIBRARY_PATH设置。

私有的so库应该没冲突一说,但好像出这个问题的都是些开源库
Android Studio集成的AVD,错误提示指向自带的部分g++的库,应该是版本比较系统so的老;Cisco Packet Tracer 7.1错误提示指向自带的qt5的一些库,我把启动报错的so直接设置成软链接到系统的so,就可以启动了
Reply View the author