gnuradio `ImportError 未定义符号`

2024-01-05

我是 GNU Radio 和 python 的新手。我正在尝试写一个相关块, 在我的代码中的某处我使用 fft 过滤器:

gr::filter::kernel::fft_filter_ccc  *d_filter;
d_filter = new gr::filter::kernel::fft_filter_ccc(1, x_vector);
d_filter->filter(noutput_items,in_y,out);

I run

cmake ../
make 

而且它完全符合要求, 但当我尝试时

make test

我会收到这个错误:

 Traceback (most recent call last):
2:   File "/home/mohammad/projects/FD/implementation_tests/oot_modules/gr-full_duplex/python/qa_fd_correlation_cc.py", line 25, in <module>
2:     import full_duplex_swig as full_duplex
2:   File "/home/mohammad/projects/FD/implementation_tests/oot_modules/gr-full_duplex/build/swig/full_duplex_swig.py", line 28, in <module>
2:     _full_duplex_swig = swig_import_helper()
2:   File "/home/mohammad/projects/FD/implementation_tests/oot_modules/gr-full_duplex/build/swig/full_duplex_swig.py", line 24, in swig_import_helper
2:     _mod = imp.load_module('_full_duplex_swig', fp, pathname, description)
2: ImportError: /home/mohammad/projects/FD/implementation_tests/oot_modules/gr-full_duplex/build/lib/libgnuradio-full_duplex.so: undefined symbol: _ZN2gr6filter6kernel14fft_filter_cccC1EiRKSt6vectorISt7complexIfESaIS5_EEi
1/1 Test #2: qa_fd_correlation_cc .............***Failed    1.30 sec

当您在头文件中声明了一个方法但没有实现它时,通常会发生这种情况。例如析构函数或其他东西。

要找出它是哪种方法,您应该分解未定义的符号_ZN2gr6filter6kernel14fft_filter_cccC1EiRKSt6vectorISt7complexIfESaIS5_EEi.

这可以使用以下方法完成c++filt工具。例如,

c++filt \ _ZN2gr6filter6kernel14fft_filter_cccC1EiRKSt6vectorISt7complexIfESaIS5_EEi

在你的情况下,这个符号是 GNU Radio 的现有符号,位于gr-filter模块。每个 GNU Radio 模块都会创建一个库,因此为了解决未定义的符号问题,您必须链接所需的库。为此,您必须执行以下步骤:

At the CMakeLists.txt模块的文件中,指定您依赖的 GNU Radio 组件。在你的情况下FILTER成分。

set(GR_REQUIRED_COMPONENTS RUNTIME FILTER)
find_package(Gnuradio "3.7.0" REQUIRED)

可以插入更多依赖项,例如:

set(GR_REQUIRED_COMPONENTS RUNTIME FILTER DIGITAL)

之后您可以使用${GNURADIO_ALL_INCLUDE_DIRS} and ${GNURADIO_ALL_LIBRARIES}自动生成的变量以正确包含正确的头文件并链接到适当的库。 例如:

include_directories(
    ${CMAKE_SOURCE_DIR}/lib
    ${CMAKE_SOURCE_DIR}/include
    ${CMAKE_BINARY_DIR}/lib
    ${CMAKE_BINARY_DIR}/include
    ${Boost_INCLUDE_DIRS}
    ${CPPUNIT_INCLUDE_DIRS}
    ${GNURADIO_RUNTIME_INCLUDE_DIRS}
    ${GNURADIO_ALL_INCLUDE_DIRS}
)

target_link_libraries(gnuradio-howto
                      ${Boost_LIBRARIES}
                      ${GNURADIO_RUNTIME_LIBRARIES}
                      ${GNURADIO_ALL_LIBRARIES})

欲了解更多信息,请参阅here https://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModulesConfig.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gnuradio `ImportError 未定义符号` 的相关文章

随机推荐