项目文件夹中的共享库

Shared Libraries in Project Folder

我目前开始使用 Linux (OpenSuse) 下的共享库。我正在编写的共享库被一堆小程序使用,这些小程序为电气工程提供了一些工具。因此图书馆是非常具体的。因此,我想将程序和共享库保留在用户主目录中。

到目前为止,我将项目文件夹的路径添加到 /etc/ld.so.conf 中,效果很好。就两个问题。

首先,用户需要 root 权限才能更改 ld.so.conf 的内容,我想避免这一点。对于用户来说,运行 软件应该尽可能简单。

第二个问题是,如果用户重命名或移动项目文件夹(包含程序和库),程序将不再 运行ning。这可能会使一些用户感到困惑。

有没有办法在没有 root 权限的情况下添加动态链接器的路径(我正在考虑从一个脚本启动我的应用程序,该脚本之前将当前路径添加到动态链接器)?

您可以设置 LD_LIBRARY_PATH 环境变量。您甚至可以为每个程序编写一些包装 shell 脚本(适当设置 LD_LIBRARY_PATH)。

您也可以 link 使用 -Wl,-run-path

阅读Drepper's paper: how to write shared libraries

顺便说一句,您应该为库确定一个固定位置,也许 $HOME/lib/ 并避免移动包含它们的目录。

让用户修改/etc/ld.so.conf绝对不是办法

一个简单的替代方法是覆盖用户 shell 初始化文件(.bashrc,...)中的 LD_LIBRARY_PATH 或 /etc/environment.[=13= 中更全局的覆盖]

示例:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/YOUR_SHARED_LIB_PATH

另一种方法是在编译您的应用程序时向链接器添加 rpath 选项,这样动态搜索路径将在搜索共享库时包含您的目录。

但不推荐,因为它不灵活(您的目录移动,...)并且需要重新编译。