在智能交通系统仿真领域,SUMO(Simulation of Urban MObility)作为开源微观交通模拟器,其源码编译安装能为研究者提供更灵活的定制能力。不同于简单的包管理器安装,从源码构建允许您启用实验性功能、进行深度调试,甚至参与社区开发。本指南将完整呈现从环境准备到成功运行的每个技术细节,特别针对Ubuntu 20.04 LTS环境优化,涵盖依赖管理、并行编译技巧以及七个关键错误解决方案。
编译SUMO需要构建工具链和特定库的支持。Ubuntu 20.04的默认软件仓库虽包含大部分所需依赖,但部分库需要手动确认版本兼容性。执行以下命令安装基础构建工具:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install build-essential cmake git -y
SUMO的核心依赖可分为三类,建议按类别安装以避免遗漏:
XML处理与图形界面
bash复制sudo apt install libxerces-c-dev libfox-1.6-dev libgl2ps-dev -y
地理空间支持
bash复制sudo apt install libgdal-dev libproj-dev -y
Python接口与工具
bash复制sudo apt install swig python3-dev python3-pip -y
提示:若需使用SUMO的并行计算功能,额外安装
libopenmpi-dev。网络模拟模块则要求libosmpbf-dev。
验证CMake版本(需≥3.5):
bash复制cmake --version
# 若版本过低,可通过官方PPA升级:
sudo add-apt-repository ppa:kitware/cmake -y && sudo apt update
sudo apt install --only-upgrade cmake -y
从SUMO官方仓库获取1.19.0版本源码(2023年12月最新稳定版):
bash复制wget https://downloads.sourceforge.net/project/sumo/sumo/version%201.19.0/sumo-src-1.19.0.tar.gz
tar xvf sumo-src-1.19.0.tar.gz
推荐建立标准化工作目录结构:
code复制~/sumo_project/
├── src/ # 存放解压后的源码
├── build/ # 构建目录(保持清洁)
└── install/ # 自定义安装路径
使用符号链接管理版本:
bash复制ln -s ~/sumo_project/src/sumo-1.19.0 ~/sumo
进入构建目录执行配置检查:
bash复制mkdir -p ~/sumo_project/build && cd ~/sumo_project/build
cmake ../sumo -DCMAKE_INSTALL_PREFIX=~/sumo_project/install
关键配置参数说明:
| 参数 | 默认值 | 推荐设置 | 作用 |
|---|---|---|---|
| CMAKE_BUILD_TYPE | Release | RelWithDebInfo | 带调试信息的优化构建 |
| PROJ_LIBRARY | 自动检测 | 显式路径 | 解决proj库版本冲突 |
| WITH_GTEST | OFF | ON | 启用单元测试支持 |
| WITH_QT | OFF | 按需启用 | Qt图形界面扩展 |
启用多线程编译(nproc自动检测CPU核心数):
bash复制make -j$(nproc) # 典型8核机器编译时间约15-20分钟
错误现象:
code复制CMake Error at CMakeLists.txt:123 (find_package):
Could not find a configuration file for package "XercesC" that is
compatible with requested version "3.2.0"
解决方案:
bash复制sudo apt remove libxerces-c-dev
wget https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.2.3.tar.gz
tar xvf xerces-c-3.2.3.tar.gz && cd xerces-c-3.2.3
./configure --prefix=/usr/local && make && sudo make install
错误现象:
code复制fatal error: FXIconDict.h: No such file or directory
修复步骤:
libfox-1.6-devbash复制cmake ../sumo -DFOX_INCLUDE_DIR=/usr/include/fox-1.6
典型错误:
code复制swig: command not found
完整修复流程:
bash复制sudo apt install swig
# 重建Python接口
rm -rf ~/sumo_project/build/src/swig
make -j$(nproc)
永久化配置建议编辑~/.bashrc:
bash复制echo 'export SUMO_HOME=~/sumo' >> ~/.bashrc
echo 'export PATH=$PATH:~/sumo_project/install/bin' >> ~/bashrc
source ~/.bashrc
验证安装:
bash复制sumo --version # 应显示"SUMO Version 1.19.0"
创建桌面快捷方式(可选):
desktop复制[Desktop Entry]
Name=SUMO GUI
Exec=sumo-gui
Icon=~/sumo/docs/sumo-icon.png
Type=Application
Terminal=false
运行内置测试套件:
bash复制cd ~/sumo_project/build
ctest -V # 详细输出测试过程
典型交通流模拟测试:
bash复制netgenerate --grid --grid.number=5 -o grid.net.xml
randomTrips.py -n grid.net.xml -r routes.rou.xml -e 50 -l
sumo -n grid.net.xml -r routes.rou.xml
性能优化对比(编译参数影响):
| 编译选项 | 执行时间(s) | 内存占用(MB) |
|---|---|---|
| -O2 | 42.7 | 320 |
| -O3 -march=native | 38.2 | 335 |
| -Os | 45.1 | 295 |
源码更新与增量编译:
bash复制cd ~/sumo
git pull origin master # 如果使用git克隆
cd ~/sumo_project/build
cmake --build . --target clean
make -j$(nproc)
创建卸载脚本uninstall_sumo.sh:
bash复制#!/bin/bash
xargs rm < ~/sumo_project/build/install_manifest.txt
sed -i '/SUMO_HOME/d' ~/.bashrc
sed -i '/sumo\/bin/d' ~/.bashrc