我目前正在寻找在Linux上公开共享库位置的方法,以便可以通过单独安装的任何程序轻松地获取它。我想使此位置可配置,以便它可以指向同一库的不同可能安装。我能想到的类似情况的例子是Qt5和Java。
长话短说,我正在开发FreeRDS
,一个基于FreeRDP
的远程桌面服务堆栈。服务器端支持RDS的应用程序链接到libwinpr-wtsapi,这是一个存根库,它公开了Microsoft Windows Terminal Services API接口,但未实现它。这使应用程序可以链接到libwinpr-wtsapi,而不必直接链接到特定的RDS实现。首次调用任何WTSAPI函数时,libwinpr-wtsapi将动态加载实际实现。但是,需要知道实现WTSAPI的动态库的位置(此处为FreeRDS)。
现在,我通过设置环境变量和库的完整路径来实现这一点:
export WTSAPI_LIBRARY=/opt/freerds/lib/x86_64-linux-gnu/libfreerds-fdsapi.so
但是,这不是很实际,因为需要为每个使用
WTSAPI
的程序设置此环境变量。在这种情况下,我在/opt/freerds
中安装了FreeRDS。我想我可以通过使用单个环境变量来简化此过程,以使用类似于JAVA_HOME的方式在系统上公开
FreeRDS
的安装前缀:export FREERDS_HOME=/opt/freerds
但是,然后我需要知道正确的库子目录。同样重要的是要知道,将来可能会同时提供提供
32-bit
64-bit
的库的FreeRDS
和WTSAPI
版本。该库基本上是通过RPC
会话管理器执行FreeRDS
的,因此绝对有可能。假设我们已经正确设置了
FREERDS_HOME
,或者FreeRDS
已安装在系统的默认安装前缀中,哪些文件将是“标准”文件以提供一些其他安装配置信息?在这里,我想我可以有一个Qt5
的qt.conf
等效项,它可以用于特定的安装子目录,例如64-bit
安装子目录,32-bit
安装子目录等。但是,我不知道在哪里我应该放那个文件。应该在<prefix>/etc/freerds/freerds.conf
中吗?想法,有人吗?谢谢!
最佳答案
如今,某些(很多?所有?)Linux发行版都包含environment-modules
,其目的是通过使用简单的前端命令自定义环境(以及最终的shell别名/功能)来提供同一软件的许多不同版本。
您可以找到所有必需的信息here。