Linux-linux中为什么不提倡用LD_LIBRARY_PATH,有什么坏处吗?
看到《程序员的自我修养》里面讲设定动态链接库的需找方式是讲到了LD_LIBRARY_PATH这种方法,但最后又说要尽量不用这种方法,不明白理由是什么。linux中为什么不提倡用LD_LIBRARY_PATH,有什么坏处吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
想到一点,如果可执行程序的是setuid和setgid位被设置的话,运行的时候LD_LIBRARY_PATH变量会被忽略(处于安全原因),导致找不到LD_LIBRARY_PATH下的动态库。
可以在环境变量LD_LIBRARY_PATH和LD_RUN_PATH中设置,也可以使用-Lpathname这个编译器选项来指定。出于安全性、性能和创建、运行独立性方面的考虑,使用环境变量的做法现在已经不提倡。一般还是在链接时使用-Lpathname和-Rpathname来指定。
参考链接:
When should I set LD_LIBRARY_PATH?
Why LD_LIBRARY_PATH is bad
这个问题也是争论已久的了。
传统派的 UNIXer是反对使用这个LD_LIBRARY_PATH变量的。
甚至反对在UNIX系统中使用任何全局变量。
因为这个不符合UNIX的简单,独立的设计哲学。
会事情混乱起来,尤其在单一程序多版本的情况下,可能出现一些库兼容的问题。
而且东西搅合在一起,让人觉得很凌乱,也给系统标准库造成污染。
让有洁癖的人受不了。
Linux下一般是通过ld.so.conf来配置非标准路径下共享库,
但这种方式和LD_LIBRARY_PATH本质上还是一样的
想解决这个问题,可以通过编译期间设置run-time path
如果一些非开源的软件,可以通过安装期间link的方式。
或者安装期间binary edit程序,修改path。