简介:这份PDF文档面向需要在Linux平台从源码编译AFSim仿真工具集的开发者与研究人员,尤其适合具备一定命令行操作经验、希望搭建本地仿真环境的中高级用户。文档完整记录了AFSim 2.9.0在Ubuntu 22.04.4 LTS下的编译过程,涵盖资源目录说明、编译环境配置、库环境变量设置、CMake配置与编译、运行测试等关键环节,并给出gcc/g++、cmake、Qt等具体版本要求及硬件配置建议。资源包内仅含1个PDF文件,大小约694KB,内容紧凑、结构清晰,按章节组织便于对照查阅。目前已有2557人学习下载。读者可据此了解源码、示例、第三方库、手册、工具与培训资料等模块的用途,掌握环境变量配置与编译排错思路,并借助运行测试环节验证编译结果,减少因路径或依赖问题导致的失败,为后续仿真开发与研究打下基础。
1. 从源码到可执行:AFSim 2.9.0 在 Linux 下的编译全流程拆解
AFSim 是一套用于任务级仿真与分析的工程工具集,2.9.0 版本在 Linux 平台下只提供源码分发,没有预编译二进制包。这意味着想用起来,必须自己走一遍编译链路。我拿到这份指南后完整复现了一次,从环境变量配置到wizard启动成功,中间踩了几个不大不小的坑。这篇笔记把编译过程拆成可抄作业的步骤,同时把每个环节的参数含义和失败排查讲清楚。适合需要在 Ubuntu 上部署 AFSim 的仿真工程师、高校实验室里做课题的学生,以及想了解这套工具集构建方式的开发者。如果你只是临时跑个 demo,这份指南可能偏重;但如果你要长期维护一套仿真环境,下面的内容能帮你省掉反复重装的时间。
2. 编译前的环境准备:目录规划与依赖包解压
2.1 为什么目录结构不能随意改
指南里反复强调“确保编译目录与文档保持一致”,这不是强迫症。AFSim 的 CMake 脚本里存在大量相对路径引用,第三方库的find_package逻辑默认从AFSIM_3RDPARTY_PATH往下找。一旦你把dependencies挪到别处,或者把3rd_party改名,CMake 配置阶段就会报找不到tiff、sqlite之类的错误。我建议直接按指南的树形结构来:
/home/sma/AFSIMSrc/ afsim/ # 源码目录 demos/ # 官方案例 dependencies/ 3rd_party/ # 第三方库 resources/ # vtk 等编译所需资源 tools.rar # 编译工具包 gcc-g++.rar # C++ 环境资源包 tools/ # 辅助工具 training/ # 培训资料这里sma是示例用户名,你换成自己的实际用户名即可,但AFSIM_HOME和AFSIM_3RDPARTY_PATH两个变量必须指向正确位置。常见做法是先把dependencies下的两个压缩包解压到位,再动环境变量。
2.2 解压第三方库与编译器资源包
dependencies目录里有两个关键压缩包:tools.rar和gcc-g++.rar。前者包含 CMake、Qt 等构建工具,后者是 gcc 4.8.5 和 g++ 4.8.5 的完整环境。为什么用这么老的编译器?因为 AFSim 2.9.0 的源码里有一些 C++11 之前的写法,用高版本 gcc 编译会报语法错误。这不是玄学,是实打实的兼容性问题。
解压命令如下:
cd /home/sma/AFSIMSrc/dependencies # 解压工具包和编译器资源包 unrar x tools.rar unrar x gcc-g++.rar # 给环境安装脚本加执行权限 chmod +x myenv_temp.shmyenv_temp.sh是指南里提到的环境安装脚本,它会自动把 gcc/g++ 的路径写入当前 shell 的环境,并检查依赖库是否完整。执行后可以用gcc --version确认版本是否为 4.8.5。如果系统里已经装了其他版本的 gcc,这个脚本会优先使用解压出来的版本,避免版本冲突。
注意:所有命令建议在 root 账户下执行,否则后续
make install阶段会因权限不足中断。
3. 环境变量配置与 CMake 工程生成
3.1 配置 .bashrc 里的库路径
AFSim 依赖的第三方库数量不少,包括 tiff、sqlite、sdl、tinyxml2、gtest、openssl、curl、proj、geos、gdal、zlib、libpng、ffmpeg、libjpeg-turbo、osg、osgEarth、qt 等。这些库都以预编译形式放在3rd_party下,需要把它们的lib或lib64目录加入LD_LIBRARY_PATH,否则编译出的可执行文件在运行时会报error while loading shared libraries。
编辑~/.bashrc,在末尾追加:
export AFSIM_HOME=/home/sma/AFSIMSrc/afsim export AFSIM_3RDPARTY_PATH=/home/sma/AFSIMSrc/dependencies/3rd_party export LD_LIBRARY_PATH=${AFSIM_3RDPARTY_PATH}/tiff-4.4.0-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/sqlite-3.32.3-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/sdl-2.0.16-x64-lnx/lib64:${AFSIM_3RDPARTY_PATH}/tinyxml2-7.1.0-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/gtest-1.8.0-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/openssl-3.1.1-x64-lnx/lib64:${AFSIM_3RDPARTY_PATH}/curl-8.2.0-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/proj-8.1.1-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/geos-3.5.1-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/gdal-3.3.2-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/zlib-1.2.11-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/libpng-1.6.37-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/ffmpeg-4.2.4-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/libjpeg-turbo-2.1.2-x64-lnx/lib:${AFSIM_3RDPARTY_PATH}/osg-3.6.3-x64-lnx/lib64:${AFSIM_3RDPARTY_PATH}/osgEarth-2.10.1-x64-lnx/lib64:${AFSIM_3RDPARTY_PATH}/qt-5.12.11-x64-lnx/lib:${LD_LIBRARY_PATH}这段配置里每个库的路径都对应3rd_party下的实际目录名,版本号写错一个字符就会导致该库加载失败。配置完成后执行source ~/.bashrc使其生效。可以用echo $LD_LIBRARY_PATH检查是否包含所有库路径。
3.2 用 cmake-gui 生成 Makefile
AFSim 的构建系统基于 CMake,指南推荐用cmake-gui图形界面来配置,因为需要手动指定源码路径和构建路径。先进入 Qt 的 bin 目录,给所有可执行文件加权限:
cd /home/sma/AFSIMSrc/dependencies/3rd_party/qt-5.12.11-x64-lnx/bin chmod +x ./* su sma # 切换到编译用户,sma 为示例用户名 sudo cmake-gui启动后,在Where is the source code填入/home/sma/AFSIMSrc/afsim,在Where to build the binaries填入/home/sma/AFSIMSrc/afsim/build。点击Configure,如果之前有过配置缓存,可以点File | Reload Cache加载。配置无报错后点击Generate,生成 Makefile。
这一步常见的失败原因是 CMake 找不到某个第三方库。如果报错信息里出现Could NOT find TIFF之类的提示,先检查AFSIM_3RDPARTY_PATH是否设置正确,再确认对应库的目录名是否与LD_LIBRARY_PATH里写的一致。另一个坑是 Qt 版本冲突:系统里如果装了其他版本的 Qt,CMake 可能优先找到系统 Qt 而不是3rd_party下的 Qt 5.12.11。解决办法是在cmake-gui里手动指定Qt5_DIR为${AFSIM_3RDPARTY_PATH}/qt-5.12.11-x64-lnx/lib/cmake/Qt5。
3.3 编译与安装
Makefile 生成后,回到终端执行编译:
su root cd /home/sma/AFSIMSrc/afsim/build make -j4-j4表示用 4 个线程并行编译,具体数字根据 CPU 核心数调整。指南里的硬件配置是 i7-13700H,14 核 20 线程,用-j8甚至-j12都可以。但内存只有 16G 的话,并行数太高可能导致内存不足,编译过程中如果出现virtual memory exhausted就是这个问题,降低并行数即可。
编译到 100% 后执行安装:
make install mkdir -p ${AFSIM_HOME}/build/wsf_install/resources/site/mil-std2525d安装完成后,wsf_install目录会出现在afsim/build下,里面包含可执行文件、库和资源文件。
4. 编译避坑:五条血泪经验
4.1 现象:CMake 配置报找不到 OpenSSL
原因:LD_LIBRARY_PATH里 OpenSSL 的路径写的是lib64,但实际解压出来的目录可能是lib。不同第三方库的目录结构不统一,有的用lib,有的用lib64。
解决:进入${AFSIM_3RDPARTY_PATH}/openssl-3.1.1-x64-lnx/看一眼实际目录名,把LD_LIBRARY_PATH里的路径改对。同理适用于 osg、osgEarth 等库。
4.2 现象:make 编译到某个模块时报 C++ 语法错误
原因:系统默认 gcc 版本过高,AFSim 2.9.0 的部分源码不兼容 C++17 的语法规则。
解决:确认myenv_temp.sh已经执行,并且gcc --version输出的是 4.8.5。如果系统里装了多个 gcc,可以用update-alternatives切换默认版本,或者直接在 CMake 里指定CMAKE_C_COMPILER和CMAKE_CXX_COMPILER为解压出来的 gcc/g++ 路径。
4.3 现象:编译成功但运行./wizard时报缺少共享库
原因:LD_LIBRARY_PATH没有覆盖所有依赖库,或者source ~/.bashrc没有在当前终端生效。
解决:用ldd ./wizard查看具体缺哪个库,然后检查该库的路径是否在LD_LIBRARY_PATH里。常见遗漏是libjpeg-turbo和ffmpeg的路径。
4.4 现象:cmake-gui 里 Configure 按钮灰色不可点
原因:源码路径或构建路径填写有误,或者当前用户对构建目录没有写权限。
解决:确认两个路径都是绝对路径且存在,构建目录如果不存在,cmake-gui 会提示创建。权限问题用chmod解决,或者切换到有权限的用户。
4.5 现象:make install 时提示权限不足
原因:编译时用了普通用户,安装时没有切回 root。
解决:make install前执行su root。指南里所有命令都强调在 root 下执行,这不是多余,是安装阶段需要往系统目录写文件。
5. 运行验证与进阶技巧
编译安装完成后,进入wsf_install/bin目录启动wizard:
cd /home/sma/AFSIMSrc/afsim/build/wsf_install/bin su root ./wizard如果能看到图形界面启动,说明编译链路完整走通了。但别急着关终端,先做两件事:一是用ldd ./wizard | grep "not found"确认没有缺失库;二是跑一个demos里的案例,验证仿真引擎能正常加载场景文件。
进阶用法方面,AFSim 的tools目录里有 Python 辅助脚本,可以用来批量处理仿真输出。常见做法是把wsf_install/bin加入PATH,这样在任何目录下都能直接调用wizard、mission等命令。另外,如果后续要重新编译某个模块,不需要每次都跑完整make,进入build目录执行make <模块名>即可增量编译。
我自己的习惯是:每次编译成功后,把~/.bashrc里的环境变量配置和cmake-gui的配置截图一起存档。因为过几个月再回来重新编译时,根本记不住当时哪个库的路径写的是lib还是lib64。从那以后我每次部署新环境都强制走一遍ldd检查,确认所有依赖都能找到再开始跑仿真。希望帮到你。
本文还有配套的精品资源,点击获取