Linux 运行的时候,是如何管理共享库(*.so)的?
在 Linux 下面,共享库的寻找和加载是由 /lib/ld.so 实现的。
ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库。
但是,如果需要用到的共享库在非标准路经,ld.so 怎么找到它呢?
目前,Linux 通用的做法是将非标准路经加入 /etc/ld.so.conf
,然后运行 ldconfig
生成
/etc/ld.so.cache
。
ld.so 加载共享库的时候,会从 ld.so.cache 查找。
传统上, Linux 的先辈 Unix 还有一个环境变量 - LD_LIBRARY_PATH
来处理非标准路经的共享库。ld.so
加载共享库的时候,也会查找这个变量所设置的路经。但是,有不少声音主张要避免使用 LD_LIBRARY_PATH
变量,尤其是作为全局变量。这些声音是:
* LD_LIBRARY_PATH is not the answer -
http://prefetch.net/articles/linkers.badldlibrary.html
* Why LD_LIBRARY_PATH is bad -
http://xahlee.org/UnixResource_dir/_/ldpath.html
* LD_LIBRARY_PATH - just say no -
http://blogs.sun.com/rie/date/20040710
解决这一问题的另一方法是在编译的时候通过 -R<path> 选项指定 run-time path。
分享到:
相关推荐
在使用动态链接库时,需要指定库的路径,可以使用 LD_LIBRARY_PATH 环境变量来指定库的路径。例如: export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH 这将告诉动态链接器在哪里可以找到共享库。 在编译和...
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib export LD_LIBRARY_PATH CLASSPATH=$CLASSPATH:$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib ...
此时就需要系统动态载入器(dynamic linker/loader)对于 `elf` 格式的可执行程序,是由 `ld-linux.so*` 来完成的,它先后搜索 `elf` 文件的 `DT_RPATH` 段—环境变量 `LD_LIBRARY_PATH`— `/etc/ld.so.cache` 文件...
在运行时,主应用程序使用绝对路径或相对于 LD_LIBRARY_PATH 的相对路径找到共享目标库,并且请求所需的 dll 入口点的地址。当需要时,也可对 dll 进行间接函数调用,最后,关闭到共享目标文件的句柄,并且从内存中...
* 设置环境变量LD_LIBRARY_PATH * 设置系统库文件的路径 * 设置动态链接库的搜索路径 七、在Delphi for Linux中用隐式或显式链接方法装入和使用SO函数 在Delphi for Linux中,可以使用隐式或显式链接方法装入和...
我们可以将我们自己的库文件添加到系统库文件的存储目录中,或者使用环境变量 LD_LIBRARY_PATH,将我们自己的库文件的路径配置到该变量中。 二、静态库生成和使用 静态库是一种在编译时被复制到程序中的库文件。...
库文件在连接(静态库和共享库)和运行(于使用共享... 在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。 2. 在 /etc/ld.so.conf 文件中添加库的搜索路径。 将自己可能存放库文件的路径都加入到/etc/ld.so.conf中
隐式格式的MATLAB代码封面树的MATLAB绑定 描述 这是John Langford制作的Cover Tree实现的MATLAB绑定,.../')添加到LD_LIBRARY_PATH环境变量中: setenv('LD_LIBRARY_PATH', [getenv('LD_LIBRARY_PATH') '/usr/lib/']);
利比苏达 这是一个C库,实现了Linda Petzold和Alan Hindmarsh的LSODA算法,该算法解决了一阶常微分方程的刚性或非...export LD_LIBRARY_PATH=../src:$LD_LIBRARY_PATH ./test 这应该给出以下内容。 at t= 4.0000e-
使用以下命令将环境变量添加到 .bashrc 文件中:export CUDA_HOME=/usr/local/cuda-7.0 && export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH && PATH=$CUDA_HOME/bin:$PATH && export PATH。 CUDA Sample...
setenv LD_LIBRARY_PATH your/full/path/to/dll ``` 五、结语 动态链接库可以实现进程之间的资源共享,节省系统的内存资源,并使程序升级变得简单。但是,动态链接库的创建和使用需要注意一些编译参数和环境变量的...
对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态...环境变量LD_LIBRARY_PATH指定的动态库搜索路径; 3./etc/ld.
Linux下动态库文件的文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件。 在链接动态库生成可执行文件时,并不会把动态库的... 把libxxx.so放入链接库的标准路径,或指定 LD_LIBRARY_PATH,
通常,这意味着在Linux上设置LD_LIBRARY_PATH或在Windows上设置PATH 。 但是,有一个可用于自动下载和安装用于x86 / 64位Linux和Windows的Tecgraf IUP,CD和IM共享库: (ql:quickload " tecgraf-libs " ) 这将根据...
或者,可以执行普通链接并使用LD_LIBRARY_PATH选择所需的实现。 执照 麻省理工学院许可证 (MIT) 版权所有 (c) 2014 Code Charm Ltd 如果您需要任何特殊许可,请联系 RushPL #ue4linux @ irc.freenode.net 或
请确保已安装FTDI驱动程序,或在链接程序用于查找共享库的位置可用(例如Windows上的PATH,LD_LIBRARY_PATH或Linux上的标准库目录) 我没有时间维护这个项目,所以我正在寻找维护者。 还提供了另一个库,该库看...
使用共享库时,需要将共享库文件连接到可执行文件中,并将共享库文件的路径配置到环境变量LD_LIBRARY_PATH中。 二、内存管理 内存管理是编程中非常重要的一方面。new 和 delete 是两种不同的内存管理方式。new 会...
将 RProxy.so、libbbcomp.so(从下载用于您自己架构的二进制文件)和 RBBComp.r 放在您的 LD_LIBRARY_PATH 中。 以 C 的 bbcomp 官方文档中描述的方式使用 RRBComp.r API。请注意,您可以传递包含多个点的矩阵,以...
文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...