林林non 2023-05-14 15:24 采纳率: 50%
浏览 109
已结题

Tinyos 2.1.2 ubuntu下基于python的TOSSIM仿真出现问题

在Ubuntu虚拟机中安装了Tinyos2.1.2,需要进行基于Python的仿真,利用TOSSIM工具,具体的步骤如下:

https://blog.csdn.net/HoraceYan/article/details/130295664

执行指令:make micaz sim
成功生成文件TOSSIM.py,但是执行下一步输入指令:from TOSSIM import *,报错如下:

>>> from TOSSIM import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "TOSSIM.py", line 7, in <module>
    import _TOSSIM
ImportError: ./_TOSSIMmodule.so: undefined symbol: __nesc_atomic_end

按照网上的教程:https://www.cnblogs.com/ziyu-trip/p/11541447.html
得知gcc,g++版本过新,需要降级,但是将gcc和g++版本降至4.8后再执行指令:make micaz sim,报错如下:

root@user-virtual-machine:/opt/tinyos-2.1.2/apps/RadioCountToLeds# make micaz sim
mkdir -p simbuild/micaz
  placing object files in simbuild/micaz
  writing XML schema to app.xml
  compiling RadioCountToLedsAppC to object file sim.o
ncc -c -shared -fPIC -o simbuild/micaz/sim.o -g -O0 -tossim -fnesc-nido-tosnodes=1000 -fnesc-simulate -fnesc-nido-motenumber=sim_node\(\) -fnesc-gcc=gcc-4.8 -Wall -Wshadow -Wnesc-all -target=micaz -fnesc-cfile=simbuild/micaz/app.c -board=micasb -DDEFINED_TOS_AM_GROUP=0x22 -finline-limit=100000 -DIDENT_APPNAME=\"RadioCountToLed\" -DIDENT_USERNAME=\"root\" -DIDENT_HOSTNAME=\"user-virtual-ma\" -DIDENT_USERHASH=0x0859c1faL -DIDENT_TIMESTAMP=0x64608749L -DIDENT_UIDHASH=0x140deaeeL -Wno-nesc-data-race RadioCountToLedsAppC.nc   -fnesc-dump=components -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=interfacedefs -fnesc-dump=tags -fnesc-dumpfile=app.xml
In file included from /usr/include/stdlib.h:55,
                 from /opt/tinyos-2.1.2/tos/lib/tossim/tos.h:58:
/usr/include/x86_64-linux-gnu/bits/floatn.h:75: syntax error before `float'
/usr/include/x86_64-linux-gnu/bits/floatn.h:87: syntax error before `_Float128'
make: *** [/opt/tinyos-2.1.2/support/make/sim.extra:69:sim-exe] 错误 1

查阅源代码floatn.h报错的部分如下图:

img

这就产生了矛盾,如果使用gcc7以上的版本,就会出现第一个错误,如果把gcc降级至4.8,就会出现第二个错误。
应该如何解决?

最终解决方案:重新安装ubuntu14.04.6,之前的ubuntu版本太新了,环境不兼容。

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2023-05-15 10:56
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:

    这个问题是由于TOSSIM工具与gcc/g++版本不兼容导致的,解决方法是安装一个旧版的gcc/g++,然后在编译TOSSIM工具时指定使用这个旧版的gcc/g++。以下是具体的解决步骤:

    1. 安装旧版gcc/g++。可以使用以下命令安装gcc/g++ 4.6:

      sudo apt-get install gcc-4.6 g++-4.6
      
    2. 设置系统默认的gcc/g++版本为4.6。可以使用以下命令:

      sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100
      sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100
      

      然后使用以下命令选择默认版本:

      sudo update-alternatives --config gcc
      sudo update-alternatives --config g++
      
    3. 编译TOSSIM工具。在编译TOSSIM工具时,需要指定使用旧版的gcc/g++。可以使用以下命令:

      make micaz sim EXTRA_CFLAGS=-DCC2420_NO_ACKNOWLEDGEMENTS EXTRA_CXXFLAGS=-DCC2420_NO_ACKNOWLEDGEMENTS CC=gcc-4.6 CXX=g++-4.6
      

      注意,如果你使用的是其它平台,需要将“micaz”替换为你所使用的平台。

    4. 测试TOSSIM工具。在Python中导入TOSSIM时,需要将当前目录加入PYTHONPATH,可以使用以下命令:

      export PYTHONPATH=$PYTHONPATH:/path/to/tinyos-2.1.2/support/sdk/python
      

      然后在Python中输入以下命令进行测试:

      from TOSSIM import *
      
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月16日
  • 修改了问题 5月16日
  • 赞助了问题酬金15元 5月14日
  • 创建了问题 5月14日

悬赏问题

  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错