news 2026/9/23 22:57:05

AFSIM 2.9.0 Ubuntu 22.04 编译指南:依赖配置与CMake实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 阶段就会找不到vtkosg这些库的.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.0libpng-1.6.37libjpeg-turbo-2.1.2:图像编解码,地形纹理和图标加载用。
  • gdal-3.3.2proj-8.1.1geos-3.5.1:地理坐标转换与矢量数据处理,想定里的经纬度、投影全靠它。
  • osg-3.6.3osgEarth-2.10.1:三维渲染引擎,态势显示的核心。
  • qt-5.12.11:GUI 框架,wizard 和各类编辑器依赖。
  • openssl-3.1.1curl-8.2.0:网络与加密。
  • sqlite-3.32.3tinyxml2-7.1.0:数据存储与配置解析。
  • ffmpeg-4.2.4sdl-2.0.16:音视频与输入设备。
  • gtest-1.8.0:单元测试。

这些库的liblib64目录都要进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}是为了不覆盖系统原有路径。参数上唯一要盯的是liblib64的区分——sdlopensslosgosgEarth用的是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.sh

chmod +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/afsim
  • Where 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.logCMakeOutput.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_DIR
cannot 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-std2525d

make install会把可执行文件、库、资源按约定布局复制到afsim/build/wsf_install。第二条mkdir是补齐 mil-std2525d 军标符号资源目录,AFSIM 的态势显示会从这里读取符号定义,缺了它 wizard 启动后地图上的军标可能显示异常。安装完成后wsf_install/bin下应该能看到wizardmission等可执行文件。

5. 运行验证与编译产物排错技巧

5.1 启动 wizard 做冒烟测试

安装完成后最直接的验证就是跑 wizard。进入 bin 目录,用 root 启动:

cd /home/sma/AFSIMSrc/afsim/build/wsf_install/bin su root ./wizard

wizard 是 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后重试。这个技巧对missionmystic等其他可执行文件同样适用。

5.3 编译产物的目录布局与二次开发入口

wsf_install的布局值得记一下,做 AFSIM 二次扩展开发时经常要往里放东西:

wsf_install/ ├── bin/ # 可执行文件:wizard、mission 等 ├── lib/ # AFSIM 自身编译出的库 ├── resources/ # 资源文件,含 site/mil-std2525d ├── include/ # 对外头文件,扩展开发用 └── share/ # 想定模板与配置

做二次扩展时,自定义插件编译出的.so一般放到lib下,头文件引用include里的接口,想定文件放sharedemos下加载。理解这个布局,后面无论是写自定义传感器模型还是接入外部数据源,都能快速找到落点。

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 是为了写系统路径和装依赖,运行阶段用普通用户更安全,这个边界分清楚,后面调试会顺很多。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 22:49:09

uBlock Origin 广告拦截插件:3 步装好,每页平均少等 2.3 秒

uBlock Origin 广告拦截插件&#xff1a;3 步装好&#xff0c;每页平均少等 2.3 秒 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 打开一个网页&a…

作者头像 李华
网站建设 2026/9/23 22:47:33

2026年AI项目管理平台深度盘点:六大产品选型与落地避坑指南

先说一个挺有意思的现象&#xff1a;2026年再聊AI项目管理平台&#xff0c;大家关注的已经不是“AI能不能帮我写周报”&#xff0c;而是“AI能不能替我把活干了”。我过去这两年一直在帮不同规模的团队做工具选型和流程改造&#xff0c;前前后后试过十几种带AI能力的项目管理软…

作者头像 李华
网站建设 2026/9/23 22:47:20

深度学习销量预测实战:京东商品销量预测源码解析与LSTM应用

简介&#xff1a;针对电商平台的销量预测需求&#xff0c;这份工程设计基于深度学习算法&#xff0c;聚焦京东商品销售数据的分析与预测。资源包内共51个文件&#xff0c;压缩后约六点九六兆&#xff0c;包含十份Python源码、十份SQL数据库脚本、十一份CSV数据文件、十二份PNG图…

作者头像 李华
网站建设 2026/9/23 22:46:47

Multisim 14.0 安装失败原因与可复现解决路径

简介&#xff1a;本资源是一份面向电子类专业学生、电路设计初学者及实验课程教师的Multisim 14.0软件零基础安装实操指南&#xff0c;专为解决Windows环境下该EDA工具部署困难、激活失败、路径配置错误等高频问题而编写。文档以PDF格式呈现&#xff0c;共1个文件&#xff0c;大…

作者头像 李华