关于Linux上的$ORIGIN解说

简介: 适当应用 `$ORIGIN`,你的应用程序将更加灵活,更易于分发和部署。

在Linux系统中,$ORIGIN 是一个特殊的环境变量,它在链接(linking)和加载(loading)共享库时扮演着重要角色。主要用于定义库(如动态链接库*.so文件)和可执行文件的运行时搜索路径。

当程序或者库被加载到内存执行时,Linux动态链接器(如ld.so或ld-linux.so)会负责寻找这些程序或者库所依赖的其它共享库。这个过程中,动态链接器会参考一系列的搜索路径来找到这些共享库。其中之一就是 $ORIGIN

$ORIGIN 的作用

$ORIGIN 代表了包含这个变量的可执行文件或者共享库的目录路径。当在编写共享库的时候,通过在链接时使用 -Wl,-rpath,'$ORIGIN' 选项(注意单引号是为了防止Shell对 $ORIGIN进行解释;在makefiles或其他文件中直接使用时,通常需要写作 $$ORIGIN来避免变量扩展),可以指定动态链接器在当前可执行文件或者库文件所在的目录下查找需要的共享库。

使用 $ORIGIN 的好处在于,它允许可移植性更高的应用程序部署,因为这意味着应用程序和它的依赖库可以被放置在文件系统中的任意位置,并且在运行时动态链接器仍然能正确找到它们,只要维持相对结构不变即可。

配置示例

如果你有一个应用程序 app 和一些依赖的库文件,如下所示的文件结构:

/usr/appdir/
    app
    lib/
        libdependency.so

在链接 app 时,可以使用:

gcc -o app app.c -L./lib -ldependency -Wl,-rpath,'$ORIGIN/lib'

这样,不管 /usr/appdir/ 复制到文件系统的哪个地方,执行 app 时,libdependency.so 都会从执行文件所在目录下的 lib 目录中被找到和加载。

在处理诸如需要将应用打包到一个单一文件夹以实现便携式部署的情况下,$ORIGIN 变量异常有用。使用 $ORIGIN ,开发者便无需担心程序部署后动态链接库的路径问题,从而大大提高了软件的移植性和灵活性。

注意事项

  • $ORIGIN 在使用时要注意转义或使用单引号,防止被Shell或其他工具错误解析;
  • 并非所有的平台或构建系统都支持 $ORIGIN,因此在跨平台构建时需要注意;
  • 使用 $ORIGIN 设置 rpath 可能带来安全问题,如果攻击者能控制应用程序目录,那么可能通过替换库来执行任意代码。因此在使用时也要注意安全性考量。

适当应用 $ORIGIN,你的应用程序将更加灵活,更易于分发和部署。

目录
相关文章
|
消息中间件 算法 安全
Linux安装RabbitMq(图文解说详细版)
Linux安装RabbitMq(图文解说详细版)
Linux安装RabbitMq(图文解说详细版)
|
Java Linux 网络安全
Linux安装Nexus(图文解说详细版)
Linux安装Nexus(图文解说详细版)
Linux安装Nexus(图文解说详细版)
|
分布式计算 资源调度 Hadoop
Linux安装Hadoop(图文解说详细版)
Linux安装Hadoop(图文解说详细版)
Linux安装Hadoop(图文解说详细版)
|
Linux 开发工具 git
Linux安装Git(图文解说详细版)
Linux安装Git(图文解说详细版)
Linux安装Git(图文解说详细版)
|
关系型数据库 MySQL Linux
Linux安装Mysql(图文解说详细版,安装包tar包版)
Linux安装Mysql(图文解说详细版,安装包tar包版)
Linux安装Mysql(图文解说详细版,安装包tar包版)
|
Linux C语言
Linux安装FastDFS(图文解说详细版)
Linux安装FastDFS(图文解说详细版)
Linux安装FastDFS(图文解说详细版)
|
JavaScript Linux
Linux安装Node.js(图文解说详细版)
Linux安装Node.js(图文解说详细版)
Linux安装Node.js(图文解说详细版)
|
XML 应用服务中间件 Linux
Linux安装Tomcat(图文解说详细版)
Linux安装Tomcat(图文解说详细版)
Linux安装Tomcat(图文解说详细版)
|
Java Linux Docker
Linux安装Docker(图文解说详细版)
Linux安装Docker(图文解说详细版)
Linux安装Docker(图文解说详细版)
|
NoSQL Linux Redis
Redis系列之一:Linux环境下Redis安装(图文解说)
本文主要介绍了在Linux环境下安装 Redis的步骤,通过文字加上图片的形式记录安装的过程。希望有需要的同学可以参考文中的安装步骤。
Redis系列之一:Linux环境下Redis安装(图文解说)