ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

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 是为了写系统路径和装依赖运行阶段用普通用户更安全这个边界分清楚后面调试会顺很多。本文还有配套的精品资源点击获取
返回列表