如何将 REDHAWK 共享库依赖项与设备一起使用?
How to use REDHAWK Shared Libraries dependencies with Devices?
我在 CentOS 7 上使用 REDHAWK 2.0.5。我正在通过 IDE 中的实施选项卡向我的设备添加共享库 (SoftPkg) 引用(例如 rh.dsp)。这允许找到 headers 和 rh.dsp 的库(位于 $SDRROOT/dom/deps/rh/dsp),并且设备构建没有问题。但是,当设备在沙盒中启动时,会发生错误,指出找不到 /deps/rh/dsp/dsp.spd.xml。当设备在域中启动时,域管理器抱怨 "error while loading shared libraries: libdsp.so.0: cannot open shared object file: No such file or directory"。
我希望能够以与组件相同的方式将 REDHAWK 共享库与设备一起使用。
使用类似的设置启动组件没有问题。我已经在 Components 的构造方法中打印了 LD_LIBRARY_PATH ,并观察到正在为我设置必要的路径。在沙盒中启动时,LD_LIBRARY_PATH 包含 $SDRROOT/dom/deps 中依赖项的路径。在域中启动时,依赖项缓存在 $SDRROOT/dev 中,LD_LIBRARY_PATH 包含这些路径。
通过将 $SDRROOT/dom/deps 复制到 $SDRROOT/dev[,我能够让我的设备在沙盒中启动=35=]/.现在正在找到 /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)。
我是否遗漏了一些允许我在设备上使用共享库的东西?或者这仅支持组件?
REDHAWK 共享库真正适用于组件而不是设备。考虑这样一种设置,您的域位于机器 A 上,并且您在不同的机器上有多个 GPP 运行ning。您不想管理所有 GPP 中的所有应用程序依赖项,事实上某些应用程序可能具有相互冲突的依赖项版本。这些问题由 REDHAWK 共享库解决。当您启动应用程序时,域会将所有组件可执行文件及其依赖项复制到 GPP 并复制到它自己的文件夹中。然后需要在启动可执行文件之前设置 LD_LIBRARY_PATH。这通过 LoadableDevice class.
发生 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 中的奇数位置,这可能也不是您想要的.
我在 CentOS 7 上使用 REDHAWK 2.0.5。我正在通过 IDE 中的实施选项卡向我的设备添加共享库 (SoftPkg) 引用(例如 rh.dsp)。这允许找到 headers 和 rh.dsp 的库(位于 $SDRROOT/dom/deps/rh/dsp),并且设备构建没有问题。但是,当设备在沙盒中启动时,会发生错误,指出找不到 /deps/rh/dsp/dsp.spd.xml。当设备在域中启动时,域管理器抱怨 "error while loading shared libraries: libdsp.so.0: cannot open shared object file: No such file or directory"。
我希望能够以与组件相同的方式将 REDHAWK 共享库与设备一起使用。
使用类似的设置启动组件没有问题。我已经在 Components 的构造方法中打印了 LD_LIBRARY_PATH ,并观察到正在为我设置必要的路径。在沙盒中启动时,LD_LIBRARY_PATH 包含 $SDRROOT/dom/deps 中依赖项的路径。在域中启动时,依赖项缓存在 $SDRROOT/dev 中,LD_LIBRARY_PATH 包含这些路径。
通过将 $SDRROOT/dom/deps 复制到 $SDRROOT/dev[,我能够让我的设备在沙盒中启动=35=]/.现在正在找到 /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)。
我是否遗漏了一些允许我在设备上使用共享库的东西?或者这仅支持组件?
REDHAWK 共享库真正适用于组件而不是设备。考虑这样一种设置,您的域位于机器 A 上,并且您在不同的机器上有多个 GPP 运行ning。您不想管理所有 GPP 中的所有应用程序依赖项,事实上某些应用程序可能具有相互冲突的依赖项版本。这些问题由 REDHAWK 共享库解决。当您启动应用程序时,域会将所有组件可执行文件及其依赖项复制到 GPP 并复制到它自己的文件夹中。然后需要在启动可执行文件之前设置 LD_LIBRARY_PATH。这通过 LoadableDevice class.
发生 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 中的奇数位置,这可能也不是您想要的.