【问题标题】:How to use REDHAWK Shared Libraries dependencies with Devices?如何将 REDHAWK 共享库依赖项与设备一起使用?
【发布时间】:2017-03-31 04:09:17
【问题描述】:

我在 CentOS 7 上使用 REDHAWK 2.0.5。我通过 IDE 中的“实施”选项卡将共享库 (SoftPkg) 引用(例如 rh.dsp)添加到我的设备。这允许找到 rh.dsp 的头文件和库(位于 $SDRROOT/dom/deps/rh/dsp),并且设备构建没有问题。但是,当设备在沙盒中启动时,会出现错误,指出找不到 /deps/rh/dsp/dsp.spd.xml。当设备在域中启动时,域管理器提示“加载共享库时出错:libdsp.so.0: 无法打开共享对象文件:没有这样的文件或目录”。

我希望能够以与组件相同的方式将 REDHAWK 共享库与设备一起使用。

启动具有类似设置的组件没有问题。我已经在 Components 的构造方法中打印出 LD_LIBRARY_PATH,并观察到正在为我设置必要的路径。在沙盒中启动时,LD_LIBRARY_PATH 包含 $SDRROOT/dom/deps 中依赖项的路径。在域中启动时,依赖项缓存在 $SDRROOT/dev 中,并且 LD_LIBRARY_PATH 包含这些路径。

我可以通过将 $SDRROOT/dom/deps 复制到 $SDRROOT/dev/ 来让我的设备在沙盒中启动。现在可以找到 /deps/rh/dsp/dsp.spd.xml 文件。 LD_LIBRARY_PATH 现在在 $SDRROOT/dev/deps 中包含了依赖项的路径(令我惊讶的是,这也意味着看似需要的 pkgconfig 文件并未确定这些路径)。这是否意味着 $SDRROOT/dev 应该有自己的部门?为什么设备在此处而不是在 $SDRROOT/dom 中?

将 $SDRROOT/dom/deps 复制到 $SDRROOT/dev/ 是否允许我在域中启动设备。它仍然无法打开 libdsp.so.0。

我在使用其他共享库时也遇到了同样的问题。这包括我自己的,以及我的 REDHAWK 安装中包含的“rh”共享库(blueFileLib、fftlib、RedhawkDevUtils)。

我是否遗漏了一些可以让我在设备上使用共享库的内容?还是只支持组件?

【问题讨论】:

    标签: redhawksdr


    【解决方案1】:

    REDHAWK 共享库实际上是用于组件而不是设备。考虑一个设置,您的域位于机器 A 上,并且您有多个 GPP 在不同的机器上运行。您不希望必须管理所有 GPP 中的所有应用程序依赖项,事实上,某些应用程序可能具有相互冲突的依赖项版本。 REDHAWK 共享库解决了这些问题。当您启动应用程序时,域会将所有组件可执行文件及其依赖项复制到 GPP 并复制到它自己的文件夹中。然后需要在启动可执行文件之前设置 LD_LIBRARY_PATH 。这通过 LoadableDevice 类发生here

    但对于设备,它们在节点上运行,而不是通过域部署。或者由 LoadableDevice 启动。它们是由用户通过 nodeBooter 可执行文件和 DeviceManager 在特定硬件资源上手动启动和运行的,因此由用户确保硬件资源具有所有运行时依赖项。

    如果您真的愿意,您可以构建 REDHAWK DSP 库并将其安装到系统目录中:

      ./reconf
      ./configure --prefix=/usr/local --libdir=/usr/local/lib
      make -j3
      sudo make install
    

    这会将 DSP 库安装到 /usr/local/lib 而不是 SDRROOT,但它也会将 XML 文件放入 /usr/local 中的奇怪位置,这可能也不是您想要的。

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 2019-04-10
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多