Linux与Solaris-编译软件

Linux与Solaris-编译软件,linux,compilation,ld,Linux,Compilation,Ld,背景: 在工作中,我习惯于在Solaris 10上工作。我们有系统管理员,他们知道自己在做什么,如果需要可以提供帮助 我从源代码处编译了apache、perl和mod_perl之类的东西,没有任何问题 我有一个redhat服务器可以玩,我遇到了问题。系统管理员现在生病了 在构建软件时,我不断遇到关于LD_LIBRARY_路径的问题。目前出于测试目的,我正在编译到我的主目录,因为我没有根目录,也没有在其他任何地方安装的权限 我计划在/opt下有一个区域供我们安装,就像我们在Solaris上所做的那

背景:

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

我从源代码处编译了apache、perl和mod_perl之类的东西,没有任何问题

我有一个redhat服务器可以玩,我遇到了问题。系统管理员现在生病了

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

我计划在/opt下有一个区域供我们安装,就像我们在Solaris上所做的那样,但我需要周围的sysadmin来为我们创建这个区域

我的.bashrc没有LD_LIBRARY_路径,所以我一直在添加一些东西来构建东西(例如,来自源代码的ffmpeg)。我一直在读这方面的文章,显然这不是一个好办法,它不可靠或是别的什么。我没有访问ldconfig的权限(权限被拒绝)

现在的问题是:

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

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

来自
LD.so(8)
手册页:


但老实说,找一个管理员。如果需要,成为一个。噢,还有构建包。

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

通常,用户可以使用
LD_LIBRARY_PATH
强制执行其程序以选择不同版本的库。通常,这对于支持库的调试或插入指令的版本很有用,但您也可以使用它将自己的代码注入到第三方代码中。(如果您可以更改某人的bash配置文件,诱使他们在未意识到的情况下执行您的代码,那么有时也可能出于恶意目的使用此配置文件)


一些应用程序如果在非默认位置安装“私有”库,也会设置LD_LIBRARY_PATH,即它们不会用于正常的动态链接,但仍然存在。对于这种情况,我倾向于选择
dlopen()
和朋友。

设置LD\u LIBRARY\u路径被认为是有害的,因为(除其他原因外):

  • 您的程序将根据
    LD\u LIBRARY\u路径动态链接。这意味着它可以链接到某个库的特定版本,该版本恰好位于您的
    LD_library\u路径中
    ,例如
    /home/user/lib/liborea.so
    。如果其他人试图在没有您的
    LD\u LIBRARY\u路径的情况下运行它,并最终链接到默认版本,例如在
    /usr/lib/liborea.so
    中,这可能会导致很多混乱
  • 它优先于任何默认系统链接路径使用。这意味着,如果你的
    LD\u LIBRARY\u路径上有一个狡猾的
    libc
    ,它可能会做一些坏事,比如泄露你的帐户

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

    从源代码编译到前缀目录和创建包有什么区别?ThanksPackages包含有关文件的元数据,这些元数据可在各种情况下使用,例如超级用户命令出错。另外,编译后的软件包可以放在一个公共位置,并根据需要安装在任意多个系统上,而无需在每个系统上重新编译。你认为下面这篇文章是一篇不错的教程,适合那些从未做过这件事的人吗?从源代码编译到前缀目录和创建包有什么区别?ThanksCreating包通常具有库依赖项跟踪的规定(由包提供和依赖)。如果两件事尝试提供相同的文件,它还提供冲突解决方案,并使直接安装到FHS的默认路径成为明智的行为,这可以避免设置任何不寻常的路径。
      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.