我在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,并观察到为我设置了必要的路径。在Sandbox中启动时,LD_LIBRARY_PATH包含$ SDRROOT / dom / deps中依赖项的路径。在域中启动时,依赖项缓存在$ SDRROOT / dev 中,LD_LIBRARY_PATH包含这些路径。
我可以通过将$ SDRROOT / dom / deps复制到$ SDRROOT / dev /来让我的设备在Sandbox中启动。现在找到了/deps/rh/dsp/dsp.spd.xml文件。 LD_LIBRARY_PATH现在包含了$ SDRROOT / dev / deps中依赖项的路径(令我惊讶的是,这也意味着看似必需的pkgconfig文件没有确定这些路径)。这是否意味着$ SDRROOT / dev 应该拥有自己的deps?为什么设备在这里而不是在$ SDRROOT / dom ?
将$ SDRROOT / dom / deps复制到$ SDRROOT / dev / 不允许我在域中启动设备。它仍然无法打开libdsp.so.0。
我也遇到了与其他共享库相同的问题。这包括我自己的,以及" rh"我的REDHAWK安装中包含的共享库(blueFileLib,fftlib,RedhawkDevUtils)。
我是否遗漏了允许我将共享库与设备一起使用的内容?或者仅支持组件?
答案 0 :(得分:0)
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中的奇怪位置,这可能不是你想要的。