ubuntu16.04でns2(ns-2.34)を使っています。  
NS2を再コンパイルするべく以下の手順でコマンドを実行したところ、makeで以下のようなエラーが出てしまいます。  
何がエラーにつながっているのか理解できません。  
すみませんがご教授お願いします。

**再コンパイル手順**

```

     ./configure        
     make clean     
     make depend        
     make   ←エラー        
     sudo make install  
    
```

**エラーメッセージ**

```

    /bin/sh: 1: ../tclcl-1.19/tcl2c++: Permission denied
    error writing "stdout": broken pipe
        while executing
    "puts "### tcl-expand.tcl: begin expanding $name""
        (procedure "expand_file" line 2)
        invoked from within
    "expand_file [file tail $name]"
        ("foreach" body line 5)
        invoked from within
    "foreach name $argv {
        set dirname [file dirname $name]
        if {$dirname != "."} {
            cd $dirname
            expand_file [file tail $name]
            cd $startupDir
        } else ..."
        (file "bin/tcl-expand.tcl" line 65)
    Makefile:528: ターゲット 'gen/ns_tcl.cc' のレシピで失敗しました
    make: *** [gen/ns_tcl.cc] エラー 126
    
```

○Makefile:528

```

    $(GEN_DIR)ns_tcl.cc: $(NS_TCL_LIB)
        $(TCLSH) bin/tcl-expand.tcl tcl/lib/ns-lib.tcl @V_NS_TCL_LIB_STL@ | $(TCL2C) et_ns_lib > $@
    
```
CC BY-SA 4.0
2018-12-05T07:44:28.417
50925
2018-12-12T13:40:04.993
2018-12-12T13:28:18.200
3060
30760
question
ubuntu
NS2のコンパイル時のエラーに関して
tcl 8.4 のスクリプトを使用して gen/ns_tcl.cc をリダイレクトにより作成しようとしているところでエラーとなっています。

[参考にした ns-2.34 の Makefile](https://github.com/barun-saha/ns2-wimax-bluetooth-
wsn/tree/master/ns-2.34) の抜粋です。

```

    TCLSH = /usr/local/bin/tclsh8.4
    TCL2C = /usr/local/bin/tcl2c++
    
    $(GEN_DIR)ns_tcl.cc: $(NS_TCL_LIB)
        $(TCLSH) bin/tcl-expand.tcl tcl/lib/ns-lib.tcl $(NS_TCL_LIB_STL) | $(TCL2C) et_ns_lib > $@
    
```

コンパイルするには tcl8.4(/usr/bin/tclsh や /usr/local/bin/tclsh8.4 など) が必要なので、tcl
パッケージを導入するなどして、再度 configure してみてはいかがでしょうか。
CC BY-SA 4.0
2018-12-11T01:24:13.400
51101
2018-12-11T01:24:13.400
22888
50925
answer
([minish さんの回答](https://ja.stackoverflow.com/a/51101/3060)、コメントでのやり取りに対する補足です)

サンプルのMakefileでは以下のような記述になっていますが

```

    TCLSH   = /usr/local/bin/tclsh8.4
    TCL2C   = /usr/local/bin/tcl2c++
    
```

ご質問の環境にて`dpkg`コマンドで確認した結果、インストールされているファイルは`/usr/bin/tclsh8.4`にあるのが分かったわけですから、その環境に合わせてMakefileの記述を修正する必要があります。  
(`tcl2c++`は適当に記載しましたが、こちらも実際の環境を確認のうえ修正してください)

```

    TCLSH   = /usr/bin/tclsh8.4
    TCL2C   = /usr/bin/tcl2c++
    
```

コメント欄でも簡単には書きましたが、`/usr/local/bin`にはソースコードからコンパイルしたものなどを置くのが一般的です。一方で、ディストリビューション提供のパッケージでインストールしたものは`/usr/bin/`などに置かれます。
CC BY-SA 4.0
2018-12-12T13:40:04.993
51152
2018-12-12T13:40:04.993
3060
50925
answer