的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.
但说实话,找管理员。如果需要成为一个。哦,并建立包。
LD_LIBRARY_PATH
使单个用户或单个进程可以在细粒度的基础上向搜索路径添加位置。 /etc/ld.so.conf应该用于系统范围库路径设置,即部署应用程序。 (更好的是,你可以将它打包为rpm/deb,并通过你的发行版平常的软件包通道进行部署)
通常用户可能使用LD_LIBRARY_PATH
来强制执行他们的程序来选择不同版本的库。通常这对于支持库的调试或检测版本非常有用,但您也可以使用它将自己的代码注入第三方代码。 (有时也可以将其用于恶意目的,如果您可以改变某人的bash配置文件来欺骗他们执行您的代码,而不会意识到这一点)。
如果某些应用程序将“私有”库安装在非默认位置,也就是说它们不会用于正常的动态链接,但仍然存在,它们也会设置LD_LIBRARY_PATH。对于这样的场景,虽然我倾向于选择dlopen()
和朋友。
设置LD_LIBRARY_PATH被认为是有害的,因为(除其他原因):
- 你的程序动态链接根据您的
LD_LIBRARY_PATH
。这意味着它可以链接到图书馆的特定版本,这恰好在您的LD_LIBRARY_PATH
例如/home/user/lib/libtheora.so
。如果其他人试图在没有您的LD_LIBRARY_PATH
的情况下运行它,并最终与默认版本链接,这会造成很多混淆。在/usr/lib/libtheora.so
。 - 它优先于任何默认的系统链接路径。这意味着,如果你最终不得不对你狡猾
libc
LD_LIBRARY_PATH
它最终可能会做坏事一样影响您的帐户。
正如伊格纳西奥说,使用套餐的地方就可以了。这可以避免图书馆的噩梦。
什么是从源代码编译为一个前缀目录,并创建一个包有什么区别?谢谢 – Raoul 2011-02-24 12:37:24
包中包含有关可以在各种情况下使用的文件的元数据,例如超级用户命令出错。另外,编译后的软件包可以放在一个共同的位置,并根据需要安装在尽可能多的系统上,而无需重新编译。 – 2011-02-24 12:39:44
他似乎是一个明智的前进方向。你会说下面的文章是一个体面的教程,以前从未这样做过的人吗? http://www.ibm.com/developerworks/library/l-rpm1/ – Raoul 2011-02-24 12:58:58