我目前正在寻找在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的库的FreeRDSWTSAPI版本。该库基本上是通过RPC会话管理器执行FreeRDS的,因此绝对有可能。

假设我们已经正确设置了FREERDS_HOME,或者FreeRDS已安装在系统的默认安装前缀中,哪些文件将是“标准”文件以提供一些其他安装配置信息?在这里,我想我可以有一个Qt5qt.conf等效项,它可以用于特定的安装子目录,例如64-bit安装子目录,32-bit安装子目录等。但是,我不知道在哪里我应该放那个文件。应该在<prefix>/etc/freerds/freerds.conf中吗?

想法,有人吗?谢谢!

最佳答案

如今,某些(很多?所有?)Linux发行版都包含environment-modules,其目的是通过使用简单的前端命令自定义环境(以及最终的shell别名/功能)来提供同一软件的许多不同版本。

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

10-08 03:37