在manjaro系统上安装Network Simulator 2

时间:2018-01-10 18:20:56

标签: ns2

我尝试在4.9.68-1-MANJARO上安装ns2但是出现了这个错误

    mdart/mdart_adp.cc:396:21: error: reference to ‘hash’ is ambiguous
  nsaddr_t dstAdd_ = hash(mdart_->id_);
                     ^~~~
In file included from ./mdart/mdart.h:52:0,
                 from ./mdart/mdart_adp.h:51,
                 from mdart/mdart_adp.cc:47:
./mdart/mdart_function.h:230:17: note: candidates are: nsaddr_t hash(nsaddr_t)
 inline nsaddr_t hash(nsaddr_t id) {
                 ^~~~
In file included from /usr/include/c++/7.2.1/bits/basic_string.h:6575:0,
                 from /usr/include/c++/7.2.1/string:52,
                 from /usr/include/c++/7.2.1/bitset:47,
                 from ./mdart/mdart_function.h:62,
                 from ./mdart/mdart.h:52,
                 from ./mdart/mdart_adp.h:51,
                 from mdart/mdart_adp.cc:47:
/usr/include/c++/7.2.1/bits/functional_hash.h:58:12: note:                 template<class _Tp> struct std::hash
     struct hash;
            ^~~~
make: *** [Makefile:94: mdart/mdart_adp.o] Error 1
Ns make failed!

我从

改变了第137行
void eraseAll() {erase(baseMap::begin(), baseMap::end()); }

void eraseAll() { baseMap::erase(baseMap::begin(), baseMap::end()); } 

但是,仍然有同样的错误。请帮帮我。

2 个答案:

答案 0 :(得分:0)

  

我将otcl-1.14 / Makefile.in的第7行更改为CC = gcc-4.9.3

这里最重要的gcc组件是 g ++

使用gcc-4.9.3 / g ++构建ns-2.35 - 4.9.3:

$ tar xvf ns-allinone-2.35_gcc5.tar.gz
$ cd ns-allinone-2.35/
$ export CC=gcc-4.9.3 CXX=g++-4.9.3 && ./install
$ cd ns-2.35/
# make install
                  // 'make install' will copy 'ns' to /usr/local/bin/
# cd ../nam-1.15/
# make install && exit

注意:(临时)导出命令将注意ns-allinone中的主要应用程序使用gcc-4.9.3 / g ++ - 4.9.3编译:tcl,tk,otcl,tclcl, ns- 2.35 ,nam-1.15。退出终端时,导出命令将被取消。

答案 1 :(得分:0)

我们必须编辑 ns-allinone-2.35 的源代码。它包含一些错误:

ns-allinone-2.35/ns-2.35/mdart/ 中,我们必须编辑 3 个文件

  • 第一个文件是 mdart_function.h ,在行号 230 处将 hash 重命名为 hash_
  • 第二个文件是 mdart_adp.cc ,在行号 108396hash 重命名为 hash_
<块引用>

我们需要将 hash 更改为 hash_ 的原因是。! , hashSTL library utility ,所以它会直接引用 STL std::hash 。所以我将 hash 重命名为 hash_

  • 第三个文件是 mdart_function.h ,在行号 48 处重写这样的行 #define __mdart_rqueue_h__
<块引用>

原因是,如果我们正在编写头文件,那么首先我们必须这样写,

#ifdefn __filename_h__
#define __filename_h__
<块引用>

仅在 filename.h 中。

现在在ns-allinone-2.35/ns-2.35/linkstate/中我们必须编辑ls.h文件

  • 在行号 64 处重写像 #ifndef __ls_h__65 应该像 #define __ls_h__

仅此而已。之后去安装。