AFSIM 2.9.0 Ubuntu 22.04 编译指南:依赖配置与CMake实战
简介这份PDF文档面向需要在Linux平台从源码编译AFSim仿真工具集的开发者与研究人员尤其适合具备一定命令行操作经验、希望搭建本地仿真环境的中高级用户。文档完整记录了AFSim 2.9.0在Ubuntu 22.04.4 LTS下的编译过程涵盖资源目录说明、编译环境配置、库环境变量设置、CMake配置与编译、运行测试等环节并给出gcc/g、cmake-qt-gui等工具版本及硬件配置参考。资源包共1个PDF文件大小约694KB内容紧凑、步骤清晰便于按章节对照操作。目前已有2522人学习下载。读者可据此了解源码、示例、第三方库、使用手册、辅助工具与培训资料的组织方式掌握环境变量与依赖库的配置思路并借助运行测试环节验证编译结果减少路径错误与权限问题带来的反复调试为后续仿真开发打下基础。1. 为什么 AFSIM 2.9.0 在 Ubuntu 22.04 上编译总卡在依赖环节AFSIM 是一套面向任务级仿真与体系对抗推演的工具集源码包里同时塞进了仿真内核、第三方库、示例想定和培训资料体量不小。很多人拿到源码后第一反应是直接cmake .. make结果在 configure 阶段就报找不到 tiff、gdal、osgEarth或者链接阶段提示 Qt 版本不匹配。问题不在代码而在于 AFSIM 2.9.0 的构建体系默认依赖一套预编译好的第三方库路径、库名、ABI 都是固定的你系统里装的 apt 版本对不上。这份编译指南的价值就在于把「环境变量 → 依赖安装 → CMake 配置 → make → 安装 → 运行 wizard」这条链路固定下来让编译结果可复现。它适合两类人一是第一次在 Linux 上从源码构建 AFSIM 的仿真工程师二是需要把 AFSIM 集成进自己 CI 或容器环境的运维开发。下面按实际操作顺序拆开讲重点放在路径约定、环境变量拼接和 CMake 缓存这几个最容易翻车的地方。2. AFSIM 2.9.0 编译环境与目录结构约定2.1 版本、系统与硬件基线先把基线对齐后面所有命令才有意义。AFSIM 2.9.0 官方验证过的组合是 Ubuntu 22.04.4 LTS gcc/g 4.8.5 cmake 3.22.1内存建议 16G 起步因为make -j4同时链接 osg、gdal 这类大库时峰值内存不低。CPU 和 GPU 不是编译瓶颈但后续跑三维态势想定时 RTX 3060 这类独显会舒服很多。项目推荐值说明AFSIM 版本2.9.0源码包版本不要混用其他版本操作系统Ubuntu 22.04.4 LTS官方验证基线构建工具cmake 3.22.1 cmake-qt-guiGUI 用于可视化配置缓存编译器gcc/g 4.8.5由依赖包提供非系统默认内存16G并行编译峰值需求第三方库随源码 dependencies 提供不要用 apt 版本替换提示gcc 4.8.5 是随dependencies/gcc-g.rar一起提供的不要用 Ubuntu 22.04 自带的 gcc 11 去编译否则第三方库的 ABI 会对不上链接阶段会出现大量 undefined reference。2.2 目录结构为什么必须照抄指南里反复强调「编译目录与文档保持一致」这不是强迫症。AFSIM 的 CMake 脚本里大量使用了相对路径和${AFSIM_3RDPARTY_PATH}变量一旦你把dependencies挪到别处configure 阶段就会找不到vtk、osg这些库的.cmake配置文件。标准布局如下/home/sma/AFSIMSrc/ # 根目录 ├── afsim/ # 源码目录 ├── demos/ # 官方案例 ├── dependencies/ │ ├── 3rd_party/ # 第三方库tiff/gdal/osg/qt 等 │ ├── resources/ # 编译所需 vtk 等资源 │ ├── tools.rar # 编译工具包 │ └── gcc-g.rar # C 环境资源包 ├── tools/ # 辅助工具含 python └── training/ # 培训资料如果你非要把根目录换到/opt/AFSIMSrc那就要同步改后面所有环境变量和 CMake 里的路径工作量远大于直接照抄。我一般会先mkdir -p /home/sma/AFSIMSrc再解压避免解压时多套一层目录。2.3 第三方库清单与用途dependencies/3rd_party下每个库都有明确分工理解它们能帮你在报错时快速定位tiff-4.4.0、libpng-1.6.37、libjpeg-turbo-2.1.2图像编解码地形纹理和图标加载用。gdal-3.3.2、proj-8.1.1、geos-3.5.1地理坐标转换与矢量数据处理想定里的经纬度、投影全靠它。osg-3.6.3、osgEarth-2.10.1三维渲染引擎态势显示的核心。qt-5.12.11GUI 框架wizard 和各类编辑器依赖。openssl-3.1.1、curl-8.2.0网络与加密。sqlite-3.32.3、tinyxml2-7.1.0数据存储与配置解析。ffmpeg-4.2.4、sdl-2.0.16音视频与输入设备。gtest-1.8.0单元测试。这些库的lib或lib64目录都要进LD_LIBRARY_PATH少一个都可能在运行 wizard 时报error while loading shared libraries。3. 环境变量配置与编译环境安装3.1 在 .bashrc 中拼接 LD_LIBRARY_PATH环境变量是整条链路的粘合剂。AFSIM_HOME指向源码根AFSIM_3RDPARTY_PATH指向第三方库根LD_LIBRARY_PATH则要把每个库的 lib 目录串起来。注意有的库是lib有的是lib64写错一个就白搭。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}逻辑说明整条LD_LIBRARY_PATH用冒号分隔末尾保留${LD_LIBRARY_PATH}是为了不覆盖系统原有路径。参数上唯一要盯的是lib与lib64的区分——sdl、openssl、osg、osgEarth用的是lib64其余是lib。改完执行source ~/.bashrc让配置立即生效再用echo $LD_LIBRARY_PATH确认拼接结果没有多余空格或换行。注意vi里粘贴长行容易断行建议用cat ~/.bashrc EOF ... EOF的方式追加避免手动换行引入错误。3.2 执行 myenv_temp.sh 安装编译环境环境变量就位后进入dependencies目录执行官方提供的环境安装脚本。这个脚本会解压 gcc/g 资源包、设置编译器软链、补齐一些系统级依赖。cd /home/sma/AFSIMSrc/dependencies chmod x myenv_temp.sh ./myenv_temp.shchmod x是给脚本加执行权限./myenv_temp.sh在 root 下运行。脚本执行过程中如果提示缺少某个 apt 包按提示apt install补上即可。执行完成后用gcc --version确认当前生效的是 4.8.5 而不是系统默认版本这一步是后面 CMake 能否找到正确编译器的前提。3.3 验证环境是否就绪在正式 CMake 之前先做三项快速检查能省掉后面大量返工# 1. 检查环境变量 echo $AFSIM_HOME echo $AFSIM_3RDPARTY_PATH # 2. 检查编译器版本 gcc --version | head -1 g --version | head -1 # 3. 检查关键库能否被动态链接器找到 ldconfig -p | grep -E libgdal|libosg|libQt5Core如果第 3 步查不到库说明LD_LIBRARY_PATH没生效或路径写错回到 3.1 逐项核对。三项都通过再往下走否则 CMake configure 阶段必然报错。4. CMake 配置与 make 编译实战4.1 用 cmake-gui 加载缓存并配置AFSIM 的构建入口在afsim/build但配置工具用的是 Qt 版的 cmake-gui路径在第三方库的 qt bin 目录下。先给 qt bin 里的可执行文件加权限再切回普通用户启动 GUI。cd /home/sma/AFSIMSrc/dependencies/3rd_party/qt-5.12.11-x64-lnx/bin chmod x ./* su sma # 切回编译用户sma 为示例用户名 sudo cmake-gui在 cmake-gui 里填两个路径Where is the source code/home/sma/AFSIMSrc/afsimWhere to build the binaries/home/sma/AFSIMSrc/afsim/build如果之前配置过缓存可能没自动加载点File | Reload Cache手动加载。然后点Configure选择生成器为Unix Makefiles。configure 过程中重点看输出里有没有Could NOT find字样尤其是 gdal、osg、Qt5 这几个。没有报错就点Generate成功后会提示Generating done此时build目录下已经生成了 Makefile。提示configure 报错时不要急着改 CMakeLists先看CMakeError.log和CMakeOutput.log九成问题出在库路径或编译器版本而不是源码本身。4.2 make -j4 并行编译与常见报错生成 Makefile 后切回 root 执行编译。-j4是并行任务数16G 内存下 4 路比较稳内存更大可以上-j8但再高收益递减且容易 OOM。su root cd /home/sma/AFSIMSrc/afsim/build make -j4编译过程会持续较长时间终端显示100%并回到命令行即表示成功。常见报错及处理报错关键字原因处理undefined reference to ...库路径或 ABI 不匹配检查 LD_LIBRARY_PATH 与 gcc 版本fatal error: QtCore/...Qt 头文件路径未进 CMake重新 configure确认 Qt5_DIRcannot find -lgdalgdal lib 目录未加入核对 3.1 中 gdal 路径virtual memory exhausted并行数过高降到-j2重试如果编译中途失败修完问题后直接重新make -j4即可已编译的目标文件不会重做这是 Makefile 增量编译的好处。4.3 make install 与资源目录补齐编译成功后执行安装把产物集中到wsf_install目录make install mkdir -p ${AFSIM_HOME}/build/wsf_install/resources/site/mil-std2525dmake install会把可执行文件、库、资源按约定布局复制到afsim/build/wsf_install。第二条mkdir是补齐 mil-std2525d 军标符号资源目录AFSIM 的态势显示会从这里读取符号定义缺了它 wizard 启动后地图上的军标可能显示异常。安装完成后wsf_install/bin下应该能看到wizard、mission等可执行文件。5. 运行验证与编译产物排错技巧5.1 启动 wizard 做冒烟测试安装完成后最直接的验证就是跑 wizard。进入 bin 目录用 root 启动cd /home/sma/AFSIMSrc/afsim/build/wsf_install/bin su root ./wizardwizard 是 AFSIM 的图形化入口能正常弹出界面并加载默认想定说明编译链路整体通了。如果启动时报error while loading shared libraries: libQt5Core.so.5说明LD_LIBRARY_PATH在 root 会话里没生效——root 的.bashrc和普通用户是分开的确认 3.1 的配置是写在 root 的~/.bashrc里。5.2 用 ldd 定位缺失的动态库wizard 启动失败时ldd是最快的诊断工具它会列出每个依赖库的解析结果ldd ./wizard | grep not found输出里凡是not found的库就是LD_LIBRARY_PATH里缺的路径。对照 3.1 的清单找到对应库目录补进去source ~/.bashrc后重试。这个技巧对mission、mystic等其他可执行文件同样适用。5.3 编译产物的目录布局与二次开发入口wsf_install的布局值得记一下做 AFSIM 二次扩展开发时经常要往里放东西wsf_install/ ├── bin/ # 可执行文件wizard、mission 等 ├── lib/ # AFSIM 自身编译出的库 ├── resources/ # 资源文件含 site/mil-std2525d ├── include/ # 对外头文件扩展开发用 └── share/ # 想定模板与配置做二次扩展时自定义插件编译出的.so一般放到lib下头文件引用include里的接口想定文件放share或demos下加载。理解这个布局后面无论是写自定义传感器模型还是接入外部数据源都能快速找到落点。5.4 一个容易被忽略的权限细节整个流程里 root 和普通用户来回切换容易在文件属主上踩坑。make install用 root 执行产物属主是 root如果后续用普通用户跑 wizard 又需要写日志或缓存就会 permission denied。常见做法是安装完成后统一改属主chown -R sma:sma /home/sma/AFSIMSrc/afsim/build/wsf_install把sma换成你的实际用户名。这样普通用户既能运行也能写运行时文件避免每次都要su root。编译阶段用 root 是为了写系统路径和装依赖运行阶段用普通用户更安全这个边界分清楚后面调试会顺很多。本文还有配套的精品资源点击获取

相关新闻

纯NumPy手写BP神经网络:小数据预测的轻量级落地方案

纯NumPy手写BP神经网络:小数据预测的轻量级落地方案

简介:本资源是一份轻量级BP神经网络Python实现代码包,面向机器学习初学者与算法实践者,聚焦神经网络核心原理的理解与动手训练。代码基于NumPy完成前向传播、误差反向传播、权重更新等关键流程,涵盖数据预处理、多层网络结构定义、…

2026/9/23 22:56:08 阅读更多 →
CNN-SVM混合模型图像分类实战:特征提取与参数调优全解析

CNN-SVM混合模型图像分类实战:特征提取与参数调优全解析

简介:这份资源聚焦CNN与SVM的融合图像分类方案,面向对深度学习和机器学习感兴趣、希望在Python中实现特征提取与分类器结合的开发者。压缩包共8个文件、仅8KB,以6个Python脚本为核心,涵盖CNN训练、特征提取、SVM训练与预测、t-SNE…

2026/9/24 23:43:20 阅读更多 →
无人机辅助边缘计算卸载:DDPG源码实战与消融实验

无人机辅助边缘计算卸载:DDPG源码实战与消融实验

简介:本资源面向通信、边缘计算与强化学习方向的学生及研究人员,提供一套基于无人机辅助移动边缘计算(UAV-MEC)的计算卸载优化完整Python实现,核心采用深度确定性策略梯度(DDPG)算法&#xff0c…

2026/9/25 14:07:01 阅读更多 →

最新新闻

校园论文选题系统开发实战:Laravel+uniapp+微信小程序

校园论文选题系统开发实战:Laravel+uniapp+微信小程序

毕业论文选题,每年春季都是高校信息部门最头疼的环节。纸质表格传阅、Excel来回汇总、学生线下找老师签字协调,一套流程走下来少说两周,还免不了各种重复和错漏。后来我接手了一个校园团队的项目,用 Thinkphp/Laravel 作为后端、u…

2026/9/25 22:08:45 阅读更多 →
zvec-grep混合搜索原理揭秘:BM25、向量检索与ripgrep如何用RRF融合排名

zvec-grep混合搜索原理揭秘:BM25、向量检索与ripgrep如何用RRF融合排名

zvec-grep混合搜索原理揭秘:BM25、向量检索与ripgrep如何用RRF融合排名 【免费下载链接】zvec-grep Local-first search across your workspace, built for humans and AI agents. 项目地址: https://gitcode.com/gh_mirrors/zv/zvec-grep zvec-grep&#xf…

2026/9/25 22:08:45 阅读更多 →
SpringBoot+Vue 实现办公用品管理系统|计算机毕设源码讲解

SpringBoot+Vue 实现办公用品管理系统|计算机毕设源码讲解

💖💖作者:计算机毕业设计小明哥 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包…

2026/9/25 22:07:44 阅读更多 →
Python Assert 语句

Python Assert 语句

我们要去搞明白, 到底什么叫做断言。断言是程序里用来坚定地声明或表明某个事实的语句。比如在编一个除法的函数时, 你内心非常确定, 那个除数是不应该等于零的, 所以你就发出了断言, 说明这个除数不是零。断言仅仅只是一个布尔表达式, 它的作用是用来检查某个具体的条件有没有…

2026/9/25 22:07:44 阅读更多 →
阿里云 300万美金加入 Linux 基金会 Alibaba Cloud joins as a Founding Corporate Patron with $3 million

阿里云 300万美金加入 Linux 基金会 Alibaba Cloud joins as a Founding Corporate Patron with $3 million

阿里巴巴云正式加入 Omacom 基金会,成为创始企业赞助人,承诺每年出资 100 万美元,连续三年!这意味着总计 300 万美元的投入,与 DigitalOcean 的赞助金额持平,将全部用于 Omarchy 的开发、维护与推广。 但这…

2026/9/25 22:06:44 阅读更多 →
云服务器怎么搭建python环境变量管理系统

云服务器怎么搭建python环境变量管理系统

要搭建一个系统用来管理环境变量这事儿, 它并不是简简单单就能弄好的, 你首先得具备一定的基础知识储备, 并且还要有一定的编程实际操作经验才行;接下来这儿有一个非常基础的系统框架可以摆在你的面前供你看一看, 这个框架可不是固定不变的死规矩, 它是可以根据你自…

2026/9/25 22:06:44 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →