的Linux VS的Solaris - 编译软件

问题描述:

背景:的Linux VS的Solaris - 编译软件

在工作中我已经习惯了在Solaris 10上合作,我们谁知道他们在做什么,如果需要的话可以帮忙的系统管理员。

我编的东西,如Apache,Perl和来自源的mod_perl没有任何问题。

我已经拥有一个红帽服务器玩和我打的问题。系统管理员目前病了。

我继续建设软件时就LD_LIBRARY_PATH击中问题。目前为了测试目的,我正在编译到我的主目录,因为我没有root权限或者在其他地方安装的权限。

我打算在/ opt下安装一个区域,就像我们在Solaris上一样,但我需要sysadmin来为我们创建这个区域。

我的.bashrc对于LD_LIBRARY_PATH没有任何帮助,所以我一直在附加一些东西来获取构建的东西(例如源自ffmpeg)。我一直在阅读关于这一点,显然这不是要走的路,它不可靠或什么。我无权访问ldconfig(权限被拒绝)。

现在quetions:

什么是建立在Linux应用程序,使它们不会打破的最佳方式?在/etc/ld.so.conf.d/下创建条目?

谁能给什么LD_LIBRARY_PATH实际上做了简要介绍?

ld.so(8)手册页:

LD_LIBRARY_PATH 
      A colon-separated list of directories in which to search for ELF 
      libraries at execution-time. Similar to the PATH environment 
      variable. 

但说实话,找管理员。如果需要成为一个。哦,并建立包。

+0

什么是从源代码编译为一个前缀目录,并创建一个包有什么区别?谢谢 – Raoul 2011-02-24 12:37:24

+0

包中包含有关可以在各种情况下使用的文件的元数据,例如超级用户命令出错。另外,编译后的软件包可以放在一个共同的位置,并根据需要安装在尽可能多的系统上,而无需重新编译。 – 2011-02-24 12:39:44

+0

他似乎是一个明智的前进方向。你会说下面的文章是一个体面的教程,以前从未这样做过的人吗? http://www.ibm.com/developerworks/library/l-rpm1/ – Raoul 2011-02-24 12:58:58

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

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

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

+0

有什么区别从源代码编译到前缀目录并创建一个包?谢谢 – Raoul 2011-02-24 12:37:56

+0

创建一个包通常有用于库的依赖关系跟踪的规定(都由你的包提供并依赖它)。它还提供了解决冲突,如果两件事情尝试,并提供相同的文件,它使直接安装到FHS理智行为的默认路径,可避免需要在所有设置任何不寻常的路径。 – Flexo 2011-02-24 12:59:27

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

  1. 你的程序动态链接根据您的LD_LIBRARY_PATH。这意味着它可以链接到图书馆的特定版本,这恰好在您的LD_LIBRARY_PATH例如/home/user/lib/libtheora.so。如果其他人试图在没有您的LD_LIBRARY_PATH的情况下运行它,并最终与默认版本链接,这会造成很多混淆。在/usr/lib/libtheora.so
  2. 它优先于任何默认的系统链接路径。这意味着,如果你最终不得不对你狡猾libcLD_LIBRARY_PATH它最终可能会做坏事一样影响您的帐户。

正如伊格纳西奥说,使用套餐的地方就可以了。这可以避免图书馆的噩梦。