我目前正在寻找在 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
。这个库基本上执行RPC
与 FreeRDS
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/