当您在头文件中声明了一个方法但没有实现它时,通常会发生这种情况。例如析构函数或其他东西。
要找出它是哪种方法,您应该分解未定义的符号_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.