wsnet 模拟器:安装期间发生分段错误(核心转储)

wsnet 模拟器:安装期间发生分段错误(核心转储)

大约一个月前,我安装了 wsnet 模拟器,一切正常(我没有遇到任何问题)。现在我卸载了 wsnet(sudo rm –r /usr/local/wsnet.2),我想再次安装它,我按照安装步骤进行操作网页。在步骤 3 中,当我使用 make 命令时出现此错误:

rng.c: In function ‘create_rng’: 
rng.c:164:14: error: variable ‘r’ set but not used [-Werror=unused-but-set-variable] 
cc1: all warnings being treated as errors 
make[3]: *** [wsnet-rng.o] Error 1 
make[3]: Leaving directory `/home/administrator/wsnet/src' 
make[2]: *** [all-recursive] Error 1 
make[2]: Leaving directory `/home/administrator/wsnet/src' 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory `/home/administrator/wsnet' 
make: *** [all] Error 2 

由于这个错误,我在 configure.ac 文件中禁用(清除)-Werror 标志,然后再次输入“make”命令。使用此技巧,它可以正常工作,“make”过程完成且没有任何错误。或者我使用 gcc.4.4.7,它会编译代码而没有任何警告。然后我输入另一个命令“sudo make install”,它会在其位置安装 wsnet。现在,当我运行每个模拟配置文件(例如 cbr.xml xy.xml 等)时,我收到此错误:

...
Entity 'battery' (9) 
using model : energy_linear 
using plugin : /usr/local/wsnet-2.0/lib//libenergy_linear.so 
author : Guillaume Chelius 
version : 0.1 
description : Linearly decreasing battery 

Environment 
using propagation : range 
propagation range : 30.000000 
using interferences : interf 
modulation : none 

Bundle 'sensor' (0) 
worldsens : 0 
mobility : static 
number of entities : 7 
static 
battery 
omnidirectionnal 
up : radio 
radio 
up : mac 
down: omnidirectionnal 
mac 
up : routing 
down: radio 
routing 
up : cbr 
down: mac 
cbr 
down: routing 
***Segmentation fault (core dumped)***

我认为这个错误发生在我使用更新管理器更新我的操作系统(Ubuntu)之后。例如,此版本的 gcc 编译器出现错误。当我使用 gdb 运行此程序时,我得到了以下回溯:

Program received signal SIGSEGV, Segmentation fault. 
0xb7ee2e5e in gsl_ran_flat () from /usr/lib/libgsl.so.0 
(gdb) bt 
#0 0xb7ee2e5e in gsl_ran_flat () from /usr/lib/libgsl.so.0 
    #1 0x080504c9 in uniform () 
#2 0x0804fd0d in get_random_x_position () 
#3 0xb78e07dc in setnode () 
from /usr/local/wsnet-2.0/lib//libmobility_static.so 
#4 0x08054d9c in parse_nodes () 
#5 0x0804e938 in do_configuration () 
#6 0x0804d827 in main () 

我回滚到 gsl、gcc(4.4.7) 库的先前版本,但它并没有解决我的问题。

答案1

我认为我解决了这个问题。

rng.c您必须更改目录中文件的代码/wsnet/src/

您必须输入此代码:

rng->r = r;
    if (seed) {
        rng->seed = seed;
        gsl_rng_set(r, seed);
    } else {
        struct timeval tv;
        gettimeofday(&tv, NULL);
        gsl_rng_set(r, tv.tv_usec + tv.tv_sec);
        rng->seed = tv.tv_usec + tv.tv_sec;
    }

create_rng在切换条件之下和之上的函数中hadas_insert

编译完成后无需将该-Werror标志清除。

它对我有用,并且我没有一个“分段错误”。

相关内容