在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报错的部分如下图:
这就产生了矛盾,如果使用gcc7以上的版本,就会出现第一个错误,如果把gcc降级至4.8,就会出现第二个错误。
应该如何解决?
最终解决方案:重新安装ubuntu14.04.6,之前的ubuntu版本太新了,环境不兼容。