GNU Radio中 AttributeError: 'module' object has no attribute 'xxxx'的解决方法

在GNU Radio中创建OOT模块,先用gr_modtool newmod mymod,创建一个module,再gr_modtool add myblock,创建一个block。有时还需要全局变量,由各个模块共享,这时,可以创建全局变量的global_vars.h头文件和相应的global_vars.cc文件,有两种方法:

  1. 在include/下添加global_vars.h文件,在lib/下添加global_vars.cc文件
  2. 将global_vars作为模块导入

方法一:手动添加文件

当只含有h文件时

  1. 只能定义const变量
  2. 函数定义需要加上inline或static
    否则在编译时,会出现在myblock.cc和global_vars.cc重复定义函数或变量的错误。
  3. 此时make, make install会成功,运行grc流图或py文件,也会成功。

当含有h文件和cc文件时

  1. h文件中只能定义const变量,非const变量只能用extern声明,cc中定义
  2. h文件中函数定义需要加上inline或static,若不加,用extern声明,cc中定义
    否则在编译时,会出现在myblock.cc和global_vars.cc重复定义函数或变量的错误。
  3. 此时make, make install会成功,但运行grc流图或py文件时,会有AttributeError: ‘module’ object has no attribute 'xxxx’的错误,这时,需要在lib/cmakelist.txt中, 加入 global_vars.cc文件,再次make,重新打开GRC。

方法二:将global作为模块导入

将global_vars作为noblock导入,注意的问题和“当含有h文件和cc文件时”类似,但注意此时include/cmakelist.txt中已含有global_vars.h,lib/cmakelist.txt中已含有 global_vars.cc文件,grc/中也有相应的xml文件(均为系统自动生成)。但运行grc流图或py文件时,会有AttributeError: ‘module’ object has no attribute 'xxxx’的错误,这时需要在swig/xxx_swig.i中删除"%include global_vars.h"这一行,再次make,重新打开GRC。

小结

  1. 在cmakelist.txt添加一些内容,主要是为了便于swig进行连接。
  2. include/cmakelist.txt中是否含有global_vars.h对两种方法没看出有什么影响,只影响/usr/local/include/mymod中是否含有global_vars.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值