首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux与Solaris -编译软件

Linux与Solaris -编译软件
EN

Stack Overflow用户
提问于 2011-02-24 20:27:29
回答 3查看 358关注 0票数 0

背景:

在工作中,我习惯于在Solaris10上工作。我们有系统管理员,他们知道自己在做什么,如果需要的话,他们可以提供帮助。

我已经从源码编译了像apache、perl和mod_perl这样的东西,没有任何问题。

我得到了一个redhat服务器来玩,但遇到了问题。系统管理员现在请病假了。

在构建软件时,我不断遇到有关LD_LIBRARY_PATH的问题。目前,出于测试目的,我正在编译到我的主目录,因为我没有root权限,也没有在其他地方安装的权限。

我计划在/opt下有一个区域供我们安装,就像我们在Solaris上所做的那样,但我需要系统管理员来为我们创建它。

我的.bashrc没有LD_LIBRARY_PATH的任何东西,所以我一直在上面添加一些东西来构建东西(例如,来自源代码的ffmpeg )。我一直在读这篇文章,显然这不是一条可行的道路,它并不可靠。我没有访问ldconfig的权限(权限被拒绝)。

现在是队列:

在linux下构建应用程序的最佳方式是什么,这样它们就不会崩溃?在/etc/ld.so.conf.d/下创建条目?

有没有人能简要介绍一下LD_LIBRARY_PATH的实际功能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-24 20:31:29

ld.so(8)手册页:

LD_LIBRARY_PATH执行时要在其中搜索ELF库的以冒号分隔的目录列表。类似于PATH环境变量。

但老实说,找个管理员吧。如果需要,就成为其中的一员。哦,还有构建包。

票数 0
EN

Stack Overflow用户

发布于 2011-02-24 20:32:02

LD_LIBRARY_PATH使单个用户或单个进程可以在细粒度的基础上将位置添加到搜索路径。/etc/ld.so.conf应用于系统范围的库路径设置,即部署应用程序。(更好的是,您可以将其打包为rpm/deb,并通过您的发行版通常的包通道进行部署)

通常,用户可能会使用LD_LIBRARY_PATH来强制执行他们的程序,以选择不同版本的库。通常,这对于偏爱调试或工具化版本的库很有用,但您也可以使用它将自己的代码注入到第三方代码中。(有时也有可能将其用于恶意目的,如果您可以更改某人的bash配置文件来欺骗他们执行您的代码,而不是意识到这一点)。

如果一些应用程序在非默认位置安装了“私有”库,也就是说,它们不会用于正常的动态链接,但仍然存在,则会设置LD_LIBRARY_PATH。然而,对于这样的场景,我倾向于使用dlopen()和朋友。

票数 0
EN

Stack Overflow用户

发布于 2011-02-24 20:41:11

设置LD_LIBRARY_PATH被认为是有害的,因为(还有其他原因):

  1. 你的程序是基于你的LD_LIBRARY_PATH动态链接的。这意味着它可以链接到某个特定版本的库,该库恰好在您的LD_LIBRARY_PATH中,例如/home/user/lib/libtheora.so。如果其他人试图在没有您的LD_LIBRARY_PATH的情况下运行它,并最终链接到默认版本,例如,在/usr/lib/libtheora.so.
  2. It中优先使用任何默认的系统链接路径,这可能会导致很多混乱。这意味着如果你的LD_LIBRARY_PATH上有一个不可靠的libc,它可能会做一些不好的事情,比如泄露你的账户。

正如ignacio所说,尽可能使用包。这避免了库的噩梦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5104637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档