【Linux笔记】linux系统下链接可执行文件时,linker如何查找共享库

当要编译的可执行程序依赖共享库时,linker按下面所示顺序查找其依赖的库。

下面的内容出自gcc manual,作为笔记,记录于此。

The linker uses the following search paths to locate required shared libraries.

1. Any directories specified by -rpath-link options.

2. Any directories specified by -rpath options.
The difference between -rpath and -rpath-link is that
directories specified by -rpath options are included in the executable and used at runtime, whereas the -rpath-link option is only effective at link time. It is for the native linker only.

3. On an ELF system, if the -rpath and "rpath-link" options were not used, search the contents of the environment variable "LD_RUN_PATH". It is for the native linker only.

4. On SunOS, if the -rpath option was not used, search any directories specified using -L options.

5. For a native linker, the contents of the environment variable "LD_LIBRARY_PATH".

6. For a native ELF linker, the directories in "DT_RUNPATH" or "DT_RPATH" of a shared library are searched for shared libraries needed by it. The "DT_RPATH" entries are ignored if "DT_RUNPATH" entries exist.

7. The default directories, normally /lib and /usr/lib.

8. For a native linker on an ELF system, if the file /etc/ld.so.conf exists, the list of directories found in that file.

If the required shared library is not found, the linker will issue a warning and continue with the link.

可见,-rpath-link指定的查找路径只会被linker使用,而-rpath指定的查找路径除用于linker查找外,还会在进程启动时被loader作为共享库查找路径。

【参考资料】

1. -rpath in manual page of gcc: man gcc and find -rpath

======================= EOF ====================

时间: 2024-11-10 14:27:35

【Linux笔记】linux系统下链接可执行文件时,linker如何查找共享库的相关文章

Linux笔记_Linux系统下如何查看及修改文件读写权限

查看文件权限的语句: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other) 然后我再解释一下后面那9位数: r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话)

linux 和windows系统下同时可用的UML建模工具(umbrello),超强

原文地址:linux 和windows系统下同时可用的UML建模工具(umbrello),超强 作者:zhangjiakouzf OPEN SOURCE 的 UML建模工具 -- umbrello 如果你的开发小组既有windows系统下的开发人员(比如客户端软件),又有linux或其他*nix系统下的开发人员(比如服务器端程序).就像我现在的处境一样,那么你需要"她",trust me!! umbrello 最初的 homepage 在http://uml.sourceforge.n

Adobe/Flash Media Server 5.0 linux 64位系统下的安装

一.下载 Adobe/Flash MS5.0下载地址: http://fs1.d-h.st/download/00036/VOt/adobemediaserver_5_ls1_linux64.tar.gz # ./wget http://fs1.d-h.st/download/00036/VOt/adobemediaserver_5_ls1_linux64.tar.gz 二.安装 # ./tar -xvf adobemediaserver_5_ls1_linux64.tar.gz # ./cd

[Linux]一些Debian系统下的自定义

163镜像的sources.list deb http://mirrors.163.com/debian/ wheezy main non-free contrib deb http://mirrors.163.com/debian/ wheezy-proposed-updates main non-free contrib deb-src http://mirrors.163.com/debian/ wheezy main non-free contrib deb-src http://mir

MD5做为文件名。机器唯一码有电脑的CPU信息和MAC地址,这两个信息需要在linux或unix系统下才能获取吧。

可以采用机器(电脑)唯一码 + 上传IP + 当前时间戳 + GUID ( + 随机数),然后MD5做为文件名.机器唯一码有电脑的CPU信息和MAC地址,这两个信息需要在linux或unix系统下才能获取吧. //获取电脑的CPU信息function OnlyU(){        $a = '';        $b = array();        if(function_exists('exec')){                if(mailto:[email protected]

Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享

Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro Authentication) Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制 Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案 Apache shiro集群实现 (六)分布式集群系统下的高可用session

sys.stdout.flush()在Linux和Windows系统下的作用

sys.stdout.flush() -> 这句代码的意思是刷新输出 Linux系统下执行脚本 不加sys.stdout.flush() 上图所示:上面这个脚本他的原意是一秒在一排输出一个数字,但是他没有加sys.stdout.flush(),所以他在五秒之后,也就是等到程序执行完毕,他才一次性输出0,1,2,4,5 加了sys.stdout.flush()执行脚本 上图所示:程序加上了sys.stdout.flush(),他就一秒输出了一个数字,这是在Linux系统下的效果 Windows系统

Linux笔记--Linux进程通信

Linux进程间通信 文章来源: http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html 一.进程间通信概述进程通信有如下一些目的:A.数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间B.共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到.C.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程).D.

Linux笔记Linux 系统命令及其使用详解(大全)

开机默认界面修改:字符界面和图形界面-->修改ect/inittab文件 Windows远程Telnet访问Linux系统:telnet+远程Linux系统IP地址 Linux目录结构: /:根目录 /bin:存放必要的命令 /boot:存放内核以及启动所需的文件等 /dev:存放设备文件 /etc:存放系统的配置文件 /home:用户文件的主目录,用户数据存放在其主目录中 /lib:存放必要的运行库 /mnt:存放临时的映射文件系统 /proc:存放存储进程和系统信息 /root:超级用户的主