跳转至

ns-3 MacOS Install

之前在ch0提到的ns-3的安装,利用的是在macOS上的OrbStack运行,这次我们直接利用macOS本机进行操作。

起因

我在做 Unison 的实验,在OrbStack上可以运行(毕竟之前配好了环境),但是虚拟机的资源有限,我还是想在本机直接运行。

当我config时:

C
1
./ns3 configure --enable-mtp --enable-examples

得到结果:

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 ./ns3 configure --enable-mtp --enable-examples
Traceback (most recent call last):
  File "/Users/huluobo/paper/UNISON-for-ns-3/./ns3", line 1920, in <module>
    main()
    ~~~~^^
  File "/Users/huluobo/paper/UNISON-for-ns-3/./ns3", line 1813, in main
    configuration_step(
    ~~~~~~~~~~~~~~~~~~^
        current_cmake_cache_folder,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
        args.dry_run,
        ^^^^^^^^^^^^^
    )
    ^
  File "/Users/huluobo/paper/UNISON-for-ns-3/./ns3", line 1244, in configuration_step
    cmake, _ = cmake_check_version()
               ~~~~~~~~~~~~~~~~~~~^^
  File "/Users/huluobo/paper/UNISON-for-ns-3/./ns3", line 1078, in cmake_check_version
    if parse_version(version) < parse_version(minimum_cmake_version):
       ~~~~~~~~~~~~~^^^^^^^^^
  File "/Users/huluobo/paper/UNISON-for-ns-3/./ns3", line 1061, in parse_version
    version = tuple(map(int, version))
ValueError: invalid literal for int() with base 10: '0-rc5'

很显然,这就是CMake的锅了啊!

Text Only
1
2
1. cmake_check_version()
2. invalid literal for int() with base 10: '0-rc5'

分析原因

其实这就是cmake版本不对的原因,重装一下就可以了。

我目前这个实验的ns3 version是3.42,它需要的Prerequisites是:

  1. C++ compiler (g++ or clang++), Python (version 3.8 or above), CMake and a build-system (e.g. make, ninja, Xcode).
  2. For macOS, use clang++ (available in Xcode or Xcode Command Line Tools).

我现在的CMake版本:

Bash
1
2
3
4
 cmake --version
cmake version 3.28.0-rc5

CMake suite maintained and supported by Kitware (kitware.com/cmake).

按常理版本够了,为什么还会出问题呢?

原因是:ns-3需要的是cmake的稳定版本,而不是预发行版本(rc)。

修复过程

  1. 首先卸载现有版本
    Bash
    1
    2
    sudo find /usr/local/bin -type l -lname '/Applications/CMake.app/*' -delete
    sudo rm -rf /Applications/CMake.app
    
  2. 下载并安装稳定版
    Bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    mkdir ~/Downloads/CMake
    
    curl --silent --location --retry 3 "https://github.com/Kitware/CMake/releases/download/v3.30.4/cmake-3.30.4-macos-universal.dmg" --output ~/Downloads/CMake/cmake-macos.dmg
    hdiutil attach -quiet -mountpoint /Volumes/cmake-macos ~/Downloads/CMake/cmake-macos.dmg
    
    cp -R /Volumes/cmake-macos/CMake.app /Applications/
    hdiutil detach /Volumes/cmake-macos
    
    sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install=/usr/local/bin
    
  3. 验证安装
    Bash
    1
    cmake --version
    
  4. 重新进行任务配置
    Bash
    1
    2
    3
    cd ~/paper/UNISON-for-ns-3
    rm -rf cmake-cache
    ./ns3 configure --enable-mtp --enable-examples
    
CMake Version

CMake的版本类型分为两种主要类型:

稳定版本

  • 格式为:<major>.<minor>.<patch>
  • patch号小于20000000
  • 这是经过完整测试的正式发布版本
  • 适合在生产环境中使用

预发行版本

  • 格式为:<major>.<minor>.<patch>-rc<n>
  • 例如:3.28.0-rc5
  • 这是正式版本发布前的测试版本
  • 可能包含未完全测试的新功能
  • 主要用于测试目的,不建议在生产环境使用

版本号说明

  • major:主版本号
  • minor:次版本号
  • patch:补丁版本号
  • rc:Release Candidate(发布候选版本)的缩写,后面的数字表示第几个候选版本

稳定版本经过完整测试,功能完备且bug较少,而预发行版本主要用于测试新功能,可能存在未知问题。

很显然了,ns-3需要CMake提供的是稳定版本