我尝试为GNURadio编译OOT模块,它使用外部设备驱动程序(LimeSuite.h)作为动态链接的共享对象(.so文件)。添加后
find_package(LimeSuite)
和cmake / Modules下的相应模块(参见https://github.com/kit-cel/gr-dab/blob/working_branch/cmake/Modules/FindFaad.cmake),我能够用make编译并观察到,以下变量发生了变化。
CMAKE_CXX_FLAGS=-lLimeSuite
LIMESUITE_FOUND=1
LIMESUITE_FOUND=1
LIMESUITE_INCLUDE_DIR=/usr/include
LIMESUITE_INCLUDE_DIRS=/usr/include
LIMESUITE_LIBRARIES=/usr/lib/x86_64-linux-gnu/libLimeSuite.so
LIMESUITE_LIBRARY=/usr/lib/x86_64-linux-gnu/libLimeSuite.so
然而,只要我在代码中使用该库,当我尝试实例化python对象时,就会出现以下错误。
AttributeError: 'module' object has no attribute 'limesdr_source'
只要我从块的实现部分使用库删除C ++代码,实例化就会再次运行。我没有收到任何执行make的错误报告。怎么会这样?知道如何进一步调试吗?
编辑:
正如下面MarcusMüller的回答所指出的,我没有正确联系。实际上,必须在三个位置编辑三个不同的cmake文件,以将外部动态加载的库(.so)添加到GNURadio中的OOT模块。我试着简要解释一下该做什么:
使用ldd可以确定外部库是否正确链接。
ldd /usr/local/lib/YOURLIB.so
答案 0 :(得分:3)
您可能忘记将limesuite对象文件添加到lib / CMakeLists.txt中的实际链接库中。
无论如何,我看到为什么你应该在与OAB +有关的OOT和几乎与硬件无关的情况下与limesuite链接的零理由。相反,将您的石灰接口封装在您自己的OOT中的块中! GNU Radio旨在成为一个块连接框架,因此您不必将信号处理块代码与硬件接口驱动程序相链接。
生成自己的OOT应该非常简单,确实:https://tutorials.gnuradio.org