QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12180|回复: 55

如何优先调用当前目录下的 so 文件?

[复制链接]
发表于 2006-3-8 23:20:10 | 显示全部楼层 |阅读模式
error while loading shared libraries: libGui_Gfq.so: cannot open shared object file: No such file or directory

我以前编译安装的XMMS移动到另外一个目录下后就出现这种提示,但是我把下XMMS文件夹下的配置文件的路径都改正过来了 ,但是仍然是这样的报错

还有个就是我最近安装的Xilinx ISE(用于VHDL设计的)第一次安装(中途提示有些模块不认,可能是2。6的原因吧)完成后可以自动启动,但是关掉后就启不动了,在字符界面下输入启动命令,也是提示找不到某个SO文件,但是那个文件明明就在命令所在目录下,真是搞不懂为什么第一次又可以启动。

XMMX移回原文件夹下又可以用,难道编译安装的有些软件是必须在configure时所指定的目录么?
————————————————————————
回答:引用“千里孤坟”的说明:
只要在程序启动脚本里或者 ~/.bashrc 里像下面那样设置环境变量,楼主所说的可执行程序要先在当前目录下搜索动态库的要求就能够实现了。

export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
发表于 2006-3-9 00:00:57 | 显示全部楼层
把so文件所在文件夹加入这个文件里面 /etc/ld.so.conf
然后运行ldconfig
回复

使用道具 举报

 楼主| 发表于 2006-3-9 20:46:15 | 显示全部楼层
这样好像比较麻烦,我所有的软件都是安装到另外一个分区的,就是说除了软件启动时产生的配置文件在我的用户目录下外,其它所有的有关此软件的文件全部是在它自己的目录下,而不是linux系统所默认的目录,

如果这样的话我只能把每个软件的路径设置加进去么?
回复

使用道具 举报

发表于 2006-3-9 20:57:01 | 显示全部楼层
最简单的方法,复制so文件或做个链接放到/usr/lib或/usr/local/lib里,然后运行ldconfig或重启系统。
回复

使用道具 举报

发表于 2006-3-9 23:34:40 | 显示全部楼层
ldconfig -n “so 文件所在的目录”
例如:
ldconfig -n /opt/abc
回复

使用道具 举报

 楼主| 发表于 2006-3-10 13:52:35 | 显示全部楼层
这样应该比较方便点, 但还是不够, 软件运行应该首先在自己所在目录下查找自己的库文件或是包, 如果是很通用的库也就是其它软件都会用到的库就在系统的库目录下找. 这样应该会少很多问题吧. (不懂编程, 自己的猜想)

个人感觉linux喜欢把每个单独的程序拆开来,然后把同类型的文件放在一个文件夹或是类似的文件夹下, 好像因为当年的编程是面向过程的,造成当时的系统做法有些类似, 当时软件又小又少, 管理起来还不算麻烦.

但现在的程序又多又大,这样程序和系统都分不开了,程序与系统的独立性感觉太差了, linux的标准库或是包也不知道是怎么定义的, 经常装东西发现会少这少那的,太难受了.  我喜欢系统和程序都分开, 或者说互不影响, 因为现在已经是面向对象的程序设计模式了, 这样系统坏了的话,我把系统分区即使是format掉,再装一个系统,以前的那些软件照样可以用多好,而其它程序随便丢掉哪个,其它的程序和系统都不受影响.
回复

使用道具 举报

发表于 2006-3-10 14:41:51 | 显示全部楼层
[quote:646ed42ac7="beyondsakai"]  我喜欢系统和程序都分开, 或者说互不影响, 因为现在已经是面向对象的程序设计模式了, 这样系统坏了的话,我把系统分区即使是format掉,再装一个系统,以前的那些软件照样可以用多好,而其它程序随便丢掉哪个,其它的程序和系统都不受影响.[/quote]

赞同这一观点。
回复

使用道具 举报

发表于 2006-3-10 14:51:47 | 显示全部楼层
为了安全性的问题,如果软件首行查找自己目录下的库的话,对安全性有极大影响。
回复

使用道具 举报

发表于 2006-3-10 15:28:16 | 显示全部楼层
在这里顺便请问一下,linux下面的程序到底能不能认到dll后缀的文件啊?

比如下载的那个mplayer的codecs包:http://www2.mplayerhq.hu/MPlayer/releases/codecs/all-20050412.tar.bz2
它的description说的是:
all codecs for Linux x86 (Win32 .dll and Linux .so)         

请问linux下的mplayer是不是也认得到dll文件呢?
回复

使用道具 举报

 楼主| 发表于 2006-3-10 17:08:05 | 显示全部楼层
“为了安全性的问题,如果软件首行查找自己目录下的库的话,对安全性有极大影响。 ”

请问有什么影响啊,不能说详细点啊,难道它就不从自己目录下找文件,这也太奇怪了吧,程序本身安装本来要占一些目录,自己的目录都不准访问。。。。。晕死啊,大不了设置权限啊。

我还是觉得这是历史原因,以前的习惯没改过来。
回复

使用道具 举报

发表于 2006-3-10 17:15:35 | 显示全部楼层
[quote:6c81fc69a0="sejishikong"]为了安全性的问题,如果软件首行查找自己目录下的库的话,对安全性有极大影响。[/quote]
我也有点想不明白。

如果使用非root用户,安全性根本不是什么问题。

如果使用root用户,几乎就是想怎么搞就怎么搞啊。--本来就没有什么安全性。
回复

使用道具 举报

发表于 2006-3-10 19:32:36 | 显示全部楼层
有些系统功能的调用是受权限管理和限制的,如果允许程序调用身边的类库,那还怎么限制。
回复

使用道具 举报

发表于 2006-3-10 20:51:21 | 显示全部楼层
比如这样,正常的话SDL程序会调用系统/usr/lib的库文件,我们做为管理员知道它是安全的,所以允许普通用户使用并执行(库文件本质上也是可执行的),假如允许普通用户首先访问自己目录里的库,那他可以伪造一个SDL的库,在这个库里执行一些对系统有害的程序.就是所谓的权限提升.
回复

使用道具 举报

发表于 2006-3-10 20:57:30 | 显示全部楼层
[quote:a57d32ee20="haulm"]有些系统功能的调用是受权限管理和限制的,如果允许程序调用身边的类库,那还怎么限制。[/quote]


感觉被sejishikong兄弟带住思维走圈了。

其实软件是不是优先调用自己目录的库,应该是编写软件的那个人设定的。
事实上就是如此。根本与安全不安全无关。编写软件的人完全可以设定优先调用自己的库
wine就是一个例子,可以调用目录下的文件,也可以调用系统的文件。
回复

使用道具 举报

 楼主| 发表于 2006-3-10 21:47:36 | 显示全部楼层
确实,这个说法完全行不通,程序安装目录下本来就有很多库文件,如果不能用,要来做什么??

程序要调用系统目录下的库不是因为安全,而是因为这些库是系统有的,(即使是程序安装进去的,也只是因为那个库其它文件会用到,是属于通用库,安装到系统目录可以让其它程序也访问,而根本扯不上安全因素,v

即使程序调用系统以外的库可能对系统造成危害,那也只是系统在程序执行时设法阻止一些非法操作,而不是在安装程序时就阻止它把库安装到私有目录,如果是这样的话,linux比windows不是还要弱 ?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-8 06:16 , Processed in 0.193444 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表