linux - 项目文件夹中的共享库

标签 linux shared-libraries

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

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

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

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

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

最佳答案

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

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

示例:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/YOUR_SHARED_LIB_PATH

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

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

关于linux - 项目文件夹中的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693853/

相关文章:

ruby - 在 CentOS 中安装 ruby​​ fastCGI 绑定(bind)时出错。如何避免~>_<~

c - gdb:在特定库中设置断点

build - 构建共享库时,是否只需要依赖库的头文件?

java - 导出 Android 库 - Android Studio

Java删除文件/目录相当于linux "rm -rf/tmp/garbagedir*"

java - 文件名包含 # 导致 Spring Batch StaxEventItemReader 无法打开

Linux设备驱动开发: what does it look like in 2012?

linux - OpenVG UTF 8/unicode 字符

用 C 创建共享库

linux - 在 .so 文件中更新动态链接的 .so 文件和在 .so 文件中更新静态链接的 .a 文件