我目前正在使用Linux下的共享库(OpenSuse)。我写的共享库被一堆小程序使用,这些程序为电气工程提供了一些工具。因此,图书馆非常具体。因此,我想将程序和共享库保留在用户主目录中。
到目前为止,我已将项目文件夹的路径添加到/etc/ld.so.conf
,该工作正常。只有两个问题。
首先,用户需要root权限才能更改我希望避免的ld.so.conf
内容。对于用户来说,运行软件应该尽可能简单。
第二个问题是,如果用户重命名或移动项目文件夹(包含程序和库),程序将不再运行。这可能会使一些用户感到困惑。
有没有办法在没有root权限的情况下添加动态链接器的路径(我正在考虑从先前将当前路径添加到动态链接器的脚本启动我的应用程序)?
答案 0 :(得分:1)
让用户修改/etc/ld.so.conf
绝对不是最佳选择。
一个简单的替代方法是在用户shell init文件(.bashrc,...)中覆盖LD_LIBRARY_PATH,或在/ etc / environment中覆盖更全局。
示例:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/YOUR_SHARED_LIB_PATH
另一种方法是在编译应用程序时将rpath选项添加到链接器,这样在搜索共享库时动态搜索路径将包含您的目录。
但不推荐使用它,因为它不灵活(您的目录移动,......)并需要重新编译。
答案 1 :(得分:0)
您可以设置LD_LIBRARY_PATH
环境变量。您甚至可以为每个程序编写一些包装shell脚本(适当地设置LD_LIBRARY_PATH
)。
您还可以使用-Wl,-run-path
阅读Drepper's paper: how to write shared libraries
顺便说一句,您应该决定库的固定位置,可能$HOME/lib/
并避免移动包含它们的目录。