0

我正在 GNU Radio 中制作一个名为test3的自定义 OOT 模块,它需要使用一些 uhd 函数。

比如我需要调用uhd::set_thread_priority_safe()函数,所以我导入thread.hpp文件:

#include <uhd/utils/thread.hpp>

由于函数调用是在uhd命名空间中,所以我尝试使用命名空间来调用函数:

namespace gr {
  namespace test3 {
    using namespace uhd;
    .
    .
    .
    int get_time_impl::work(int noutput_items,
    gr_vector_const_void_star &input_items,
    gr_vector_void_star &output_items)
    {
        uhd::set_thread_priority_safe();
        return 0;
    }
}

但是这样做不起作用,我收到以下错误:

AttributeError: module 'test3' has no attribute 'get_time'

但是当我删除 uhd 函数调用时,错误就消失了。

我怎么解决这个问题?

4

2 回答 2

1

我通过以下步骤解决了这个问题。

  1. 在 gr-module/CMakeLists.txt 中,我在“查找 gnuradio 构建依赖项”部分添加了“find_package(UHD)”。
  2. 在 gr-module/lib/CMakeLists.txt 中,我将目标链接库命令更新为“target_link_libraries(gnuradio-module gnuradio::gnuradio-runtime UHD::UHD)”。

在上述更改后运行 cmake 和 make 命令后,问题得到解决。

于 2022-01-04T12:19:53.227 回答
0

不要使用!_ using namespace uhd;您甚至没有使用该导入的命名空间,因此它完全没用,并且您可能会使用uhd命名空间中的元素覆盖范围内的事物。正如您目前所做的那样,从该命名空间访问元素只需在访问时指定命名空间即可,如uhd::set_thread_priority_safe.

经验法则:using namespace xyz;很少是一个好主意。躲开它。

这是否是这里的问题是不可能的。

于 2022-01-03T13:04:16.110 回答