c - 在 Linux 中公开共享库的自定义位置的最佳方法

标签 c linux shared-libraries

我目前正在寻找在 Linux 上公开共享库位置的方法,以便任何单独安装的程序都可以轻松获取它。我想使这个位置可配置,以便它可以指向同一库的不同可能安装。我能想到的类似情况的例子是 Qt5 和 Java。

长话短说,我正在开发FreeRDS ,一个FreeRDP基于远程桌面服务堆栈。服务器端 RDS 感知应用程序链接到 libwinpr-wtsapi,这是一个公开 Microsoft Windows 终端服务 API 接口(interface)但不实现它的 stub 库。这使得应用程序能够链接到 libwinpr-wtsapi,而无需直接链接到特定的 RDS 实现。在第一次调用任何 WTSAPI 函数时,真正的实现由 libwinpr-wtsapi 动态加载。但是,需要知道实现 WTSAPI 的动态库(此处为 FreeRDS)的位置。

现在,我通过设置具有库的完整路径的环境变量来实现此目的:

export WTSAPI_LIBRARY=/opt/freerds/lib/x86_64-linux-gnu/libfreerds-fdsapi.so

但是,这不太实用,因为需要使用 WTSAPI 为每个程序设置此环境变量。 。在本例中,我将 FreeRDS 安装在 /opt/freerds 中。 .

我想我可以通过使用单个环境变量来公开 FreeRDS 的安装前缀来简化此过程。在系统上,具有类似于 JAVA_HOME 的内容:

export FREERDS_HOME=/opt/freerds

但是,我需要知道正确的库子目录。同样重要的是要知道,将来有可能同时提供 32-bit和一个 64-bit提供 FreeRDS 的库版本WTSAPI 。这个库基本上执行RPCFreeRDS session 管理器,所以这绝对是可能的。

假设我们有 FREERDS_HOME正确设置,或者FreeRDS安装在系统的默认安装前缀中,哪些文件将是“标准”以提供一些附加的安装配置信息?在这里,我想我可以拥有相当于 Qt5 的值。的qt.conf这将是特定的安装子目录,例如 64-bit安装子目录,32-bit安装子目录等。但是,我不知道应该将该文件放在哪里。应该在 <prefix>/etc/freerds/freerds.conf

有什么想法吗?谢谢!

最佳答案

现在的一些(很多?全部?)Linux 发行版包含环境模块,其目的正是通过自定义环境(最终是 shell 别名/)来提供同一软件的许多不同版本。函数)以及简单的前端命令。

您可以找到所有需要的信息here .

关于c - 在 Linux 中公开共享库的自定义位置的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22460094/

相关文章:

Eclipse 中的 C 代码自动完成

c - 多次读取文件失败(需要字符数组 malloc?)

c - 有没有一种算法可以在线性时间内计算数组反转?

linux - Linux 操作系统可执行存档文件的选项 - 自安装程序

c++ - 告诉 linux 二进制文件在哪里加载共享库

c - 从另一个线程访问主线程的局部变量

linux - 如何设置svn自动导出到public_html?

python - OpenCv - cv2.VideoWriter对象没有属性释放

python - 在 Python 中使用 ctypes.util.find_library 获取库的完整路径

c - 为什么构建.so文件涉及多个.c文件