
简介这份PDF文档面向需要在Linux平台从源码编译AFSim仿真工具集的开发者与研究人员针对官方资料零散、依赖配置繁琐、编译易踩坑等问题完整记录了一次AFSim 2.9.0在Ubuntu 22.04.4 LTS上的实际编译过程。文档围绕资源目录结构、编译环境、编译目录、编译流程与运行测试五个模块展开涵盖源码、官方案例、第三方库、使用手册、辅助工具及培训资料等资源说明并给出cmake-3.22.1、gcc/g 4.8.5、Qt5.15等工具链版本以及内存、CPU、GPU等硬件配置参考。编译部分详细讲解AFSIM_HOME与AFSIM_3RDPARTY_PATH等环境变量配置、依赖库安装、CMake配置与编译、运行测试等关键环节并提示路径一致性与root权限等易错细节。资源包为1个PDF文件大小约694KB已有2557人学习适合具备一定命令行基础、希望少走弯路的AFSim使用者参考。1. AFSim 2.9.0 在 Ubuntu 22.04 上编译为什么你的第一次尝试大概率会卡在环境变量AFSim 2.9.0 这套仿真工具集在 Linux 下的编译属于那种“看起来步骤不多、真动手全是坑”的典型。我见过太多人把源码解压完照着零散帖子敲了几行命令结果卡在cmake-gui的 configure 阶段报错信息翻来覆去就是找不到某个.so或者 gcc 版本对不上。问题往往不在编译本身而在编译之前——环境变量没配全、第三方库路径没串起来、编译器版本选错。这篇记录面向的是需要在 Ubuntu 22.04.4 LTS 上从源码编译 AFSim 2.9.0 的开发者尤其是第一次接触这套工具集、对 Linux 编译流程不算特别熟的人。我会把目录结构、环境变量、依赖安装、CMake 配置、编译安装、运行验证整条链路拆开每一步都落到具体命令和参数上中间穿插我踩过的坑和绕过去的办法。你照着走大概率能少折腾几个小时。2. 编译前的环境准备目录、依赖与编译器版本选择2.1 目录结构先对齐别自己另起一套AFSim 2.9.0 的源码包解压后目录层级是有讲究的。我建议你直接按下面这个结构放不要随意改名或挪位置因为后面环境变量和 CMake 配置里会硬编码这些路径/home/sma/AFSIMSrc/ # 根目录 afsim/ # 源码目录 demos/ # 官方案例 dependencies/ 3rd_party/ # 第三方库 resources/ # 编译所需 vtk 等资源 tools.rar # 编译工具包 gcc-g.rar # C 环境资源包 tools/ # 辅助工具含 python 等 training/ # 开发者/用户培训资料这里sma是示例用户名你换成自己的实际用户名即可但后续所有路径都要同步改。我一般会把整个AFSIMSrc放在/home下避免放在/opt或/usr/local里因为权限问题反复sudo。另外注意dependencies下有两个压缩包tools.rar和gcc-g.rar它们不是摆设后面安装编译环境时会用到。2.2 编译器版本gcc 4.8.5 不是随便选的AFSim 2.9.0 官方文档里写的编译器是 gcc-4.8.5 和 g-4.8.5。Ubuntu 22.04 默认的 gcc 版本是 11.x直接用系统默认编译器去编大概率会在链接阶段报一堆undefined reference或者 C 标准库符号对不上。所以你需要把dependencies/gcc-g.rar解压出来用里面自带的 gcc/g 环境。常见做法是解压后把对应的bin目录加到PATH最前面或者直接在 CMake 配置时指定编译器路径。我一般会在~/.bashrc里临时把 gcc-4.8.5 的路径前置编译完再撤掉避免影响系统其他工具。2.3 系统依赖和硬件底线操作系统是 Ubuntu 22.04.4 LTS这个版本本身没问题但你需要确保一些基础包已经装上sudo apt update sudo apt install -y build-essential cmake qtbase5-dev libgl1-mesa-dev libglu1-mesa-devbuild-essential提供 make、gcc 等基础工具cmake是构建工具qtbase5-dev是cmake-gui依赖的 Qt5 开发库后面 OpenGL 相关的库是 AFSim 图形模块需要的。硬件方面官方建议 16G 内存起步我实测 16G 编译make -j4时内存占用会到 12G 左右如果你只有 8G建议把并行数降到-j2否则容易触发 OOM。CPU 和 GPU 倒不是编译瓶颈但后续跑仿真测试时独立显卡会舒服很多。3. 配置环境变量与安装编译环境最容易写错的两步3.1 环境变量LD_LIBRARY_PATH 的拼接逻辑AFSim 编译依赖大量第三方库这些库都在dependencies/3rd_party下按库名和版本号分目录存放。你需要把每个库的lib或lib64目录都加到LD_LIBRARY_PATH里。原始文档给了一长串我把它拆开解释一下su root vi ~/.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}这里有几个细节容易翻车。第一每个库的 lib 目录名不统一有的是lib有的是lib64写错一个就会在运行时报cannot open shared object file。第二末尾的${LD_LIBRARY_PATH}不能丢否则会把系统原有的库路径覆盖掉导致ls、vi这类基础命令都跑不起来。第三路径里的用户名sma要换成你自己的。改完后执行source ~/.bashrc然后验证一下echo $AFSIM_HOME echo $LD_LIBRARY_PATH | tr : \n | head -5能正确输出路径就说明环境变量生效了。3.2 安装编译环境myenv_temp.sh 做了什么进入dependencies目录执行安装脚本cd /home/sma/AFSIMSrc/dependencies chmod x myenv_temp.sh ./myenv_temp.sh这个脚本主要做两件事解压tools.rar和gcc-g.rar把编译工具链和辅助工具释放到对应目录。执行过程中如果提示权限不足确认你是在 root 下操作。脚本跑完后检查dependencies下是否多出了tools和gcc-g相关目录。如果脚本报错常见原因是rar解压工具没装先sudo apt install unrar再重试。提示所有命令建议在 root 账户下执行避免编译过程中因为权限问题中断。但 CMake 配置阶段原始文档建议切回普通用户这个后面会讲。4. CMake 配置与编译从 configure 到 make install 的完整链路4.1 启动 cmake-gui 并设置源码与构建路径AFSim 自带了一个 Qt 版的 CMake GUI在dependencies/3rd_party/qt-5.12.11-x64-lnx/bin下。先给它加执行权限cd /home/sma/AFSIMSrc/dependencies/3rd_party/qt-5.12.11-x64-lnx/bin chmod x ./*然后切回普通用户原始文档用的是sma启动 cmake-guisu sma sudo cmake-gui在界面里Where is the source code填/home/sma/AFSIMSrc/afsimWhere to build the binaries填/home/sma/AFSIMSrc/afsim/build。这两个路径必须和你的实际目录一致否则后续make install会找不到输出位置。如果界面没有自动加载缓存点击File - Reload Cache。然后点Configure选择生成器时选Unix Makefiles。第一次 configure 会扫描依赖库如果环境变量配对了通常不会报错。如果报错找不到某个库回到第 3 章检查LD_LIBRARY_PATH里对应库的路径是否写对。4.2 Configure 与 Generate 阶段的参数取舍Configure 完成后界面里会出现一堆可配置项。大部分保持默认即可但有几个我建议你确认一下CMAKE_BUILD_TYPE默认可能是空建议设为Release编译出来的二进制性能更好体积也更小。CMAKE_INSTALL_PREFIX默认会指向afsim/build/wsf_install这个就是最终安装目录不要改到系统路径下否则卸载麻烦。AFSIM_3RDPARTY_PATH确认它自动读到了你环境变量里的值如果为空手动填上/home/sma/AFSIMSrc/dependencies/3rd_party。确认无误后点Generate生成 Makefile。如果 Generate 报错多半是某个依赖库的 CMake 配置文件没找到去3rd_party下对应库的目录里看看有没有lib/cmake或share/cmake之类的路径手动加到CMAKE_PREFIX_PATH里。4.3 make 编译与 make install 安装Generate 成功后切回 root进入 build 目录开始编译su root cd /home/sma/AFSIMSrc/afsim/build make -j4-j4表示用 4 个并行任务编译。如果你的机器核心多、内存大可以加到-j8如果内存紧张降到-j2。编译过程会持续比较久终端会滚动输出大量编译信息。看到进度到 100% 并停在命令行提示符时说明编译完成。接着执行安装make install安装完成后还需要手动创建一个资源目录mkdir -p ${AFSIM_HOME}/build/wsf_install/resources/site/mil-std2525d这个目录是 AFSim 运行时存放标准符号资源的不创建的话后续某些仿真场景会报资源缺失。注意make install之后不要急着删 build 目录后面排查问题时还需要回头看编译日志和 CMake 缓存。5. 避坑与排查编译 AFSim 时最常见的 5 个翻车现场5.1 现象cmake-gui 启动报 Qt 插件错误原因cmake-gui依赖 Qt5 的 platform 插件如果QT_QPA_PLATFORM_PLUGIN_PATH没设置或者系统里装了多个 Qt 版本冲突就会报could not find or load the Qt platform plugin xcb。解决在启动前显式指定插件路径export QT_QPA_PLATFORM_PLUGIN_PATH/home/sma/AFSIMSrc/dependencies/3rd_party/qt-5.12.11-x64-lnx/plugins/platforms然后再运行cmake-gui。如果还不行检查系统是否装了libxcb-xinerama0缺的话sudo apt install libxcb-xinerama0。5.2 现象configure 阶段报找不到 tiff/sqlite 等库原因LD_LIBRARY_PATH只影响运行时动态链接CMake 在 configure 阶段找库靠的是CMAKE_PREFIX_PATH或库自带的 CMake 配置文件。如果第三方库目录下没有.cmake文件CMake 就找不到。解决在 cmake-gui 里手动添加CMAKE_PREFIX_PATH把每个库的根目录都加进去用分号隔开。或者更省事的办法在~/.bashrc里加一行export CMAKE_PREFIX_PATH${AFSIM_3RDPARTY_PATH}/tiff-4.4.0-x64-lnx:${AFSIM_3RDPARTY_PATH}/sqlite-3.32.3-x64-lnx:...把主要库的根目录都列上然后重新source再 configure。5.3 现象make 编译到一半报 gcc 版本不兼容原因系统默认 gcc 是 11.x而 AFSim 2.9.0 的代码是按 gcc 4.8.5 写的C 标准库 ABI 不匹配。解决确认dependencies/gcc-g.rar已经解压并且PATH里 gcc-4.8.5 的路径在系统路径之前。可以在终端里which gcc看一下当前用的是哪个版本。如果不是 4.8.5在~/.bashrc里把 gcc-4.8.5 的bin目录 export 到PATH最前面。5.4 现象make install 后运行 wizard 报缺少 .so 文件原因LD_LIBRARY_PATH里某个库的路径写错了或者库目录名从lib写成了lib64反之亦然。解决用ldd检查 wizard 依赖ldd /home/sma/AFSIMSrc/afsim/build/wsf_install/bin/wizard | grep not found哪个库 not found就去3rd_party下找它的实际 lib 目录修正LD_LIBRARY_PATH里对应的路径。5.5 现象编译过程中内存耗尽被 kill原因make -j4并行编译时每个编译单元都会占内存16G 内存跑 4 并行在链接大型目标文件时可能触顶。解决降到make -j2或者临时加 swapsudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile编译完再swapoff并删除 swapfile。6. 装完怎么验证运行 wizard 与检查安装完整性编译安装完成后最终产物在/home/sma/AFSIMSrc/afsim/build/wsf_install下。这个目录里bin放可执行文件lib放库resources放资源。验证的第一步是确认目录结构完整ls /home/sma/AFSIMSrc/afsim/build/wsf_install你应该能看到bin、lib、resources、include等目录。如果bin是空的说明make install没真正执行成功回去看安装日志。第二步进入bin目录运行 wizardcd /home/sma/AFSIMSrc/afsim/build/wsf_install/bin su root ./wizardwizard是 AFSim 的图形化启动入口。如果它能正常弹出界面说明编译和安装都成功了。如果报错按第 5 章的排查方法逐条检查。我一般还会顺手跑一下./wizard --help看看命令行参数是否正常输出这能验证基础运行时环境没问题。第三步检查关键库是否都能被正确加载ldd ./wizard | grep not found输出为空表示所有依赖库都能找到。如果有 not found回到LD_LIBRARY_PATH修正。第四步跑一个官方案例做冒烟测试。demos目录下有现成的场景文件挑一个简单的cd /home/sma/AFSIMSrc/demos ls找一个.txt或.af场景文件用 wizard 加载运行。如果场景能正常加载并开始仿真说明整套环境已经跑通。提示第一次运行 wizard 时如果界面卡住不动先检查显卡驱动和 OpenGL 库是否正常。glxinfo | grep OpenGL version能输出版本信息就说明图形环境没问题。从那以后我每次编译完 AFSim都会强制走一遍ldd检查加一个 demo 场景冒烟测试不看到 wizard 界面弹出来、场景跑起来就不算装完。这套流程帮我省掉了好几次“以为装好了、结果一跑就崩”的尴尬。希望帮到你。本文还有配套的精品资源点击获取