当前位置: 首页 > article >正文

银河麒麟系统(arm64)下基于CMake的GEOS3.8.2编译实战指南

1. 银河麒麟系统与GEOS编译背景最近在国产化替代的大背景下越来越多的开发者开始接触银河麒麟操作系统。作为一款基于Linux的国产系统银河麒麟在arm64架构上的表现相当出色但同时也带来了新的挑战——很多常用的开源库并没有现成的arm64版本可用。GEOSGeometry Engine - Open Source作为地理信息系统中处理空间几何运算的核心库在GIS开发中扮演着重要角色。我最近就在飞腾FT2000处理器的银河麒麟系统上成功编译了GEOS 3.8.2版本整个过程踩了不少坑也积累了一些经验。arm64架构与常见的x86架构有很大不同这导致很多依赖库需要从头编译。特别是在银河麒麟系统上系统自带的工具链版本往往较低比如CMake就只有3.5.1版本而GEOS 3.8.2要求至少CMake 3.8.1以上。这就意味着我们需要先升级CMake然后再编译GEOS。整个过程看似简单但实际操作中会遇到各种依赖问题和编译错误下面我就把完整的解决过程分享给大家。2. 环境准备与工具链升级2.1 系统环境确认在开始之前我们需要先确认系统的基本环境。打开终端执行以下命令查看系统信息uname -a cat /etc/os-release这会显示系统内核版本和操作系统详细信息。我使用的环境是银河麒麟V10系统内核版本4.19.90运行在飞腾FT2000处理器上。arm64架构的一个重要特点是字节序为小端模式这与x86一致但在指令集和性能优化上有很大差异。2.2 安装基础开发工具银河麒麟系统默认可能没有安装完整的开发工具链我们需要先安装一些基础包sudo yum install -y gcc gcc-c make automake autoconf libtool这里特别注意银河麒麟的软件源可能与其他Linux发行版不同如果遇到包找不到的情况可能需要配置额外的软件源。安装完成后建议检查gcc版本gcc --versionarm64架构下的编译器优化选项与x86不同在后续编译时可以针对性地设置一些优化参数。2.3 升级CMake工具链系统自带的CMake 3.5.1版本太低我们需要手动编译安装新版本。首先从CMake官网下载3.20.3版本源码包wget https://cmake.org/files/v3.20/cmake-3.20.3.tar.gz tar -zxvf cmake-3.20.3.tar.gz cd cmake-3.20.3编译CMake的过程比较直接但有几个关键点需要注意./bootstrap --prefix/usr/local make -j$(nproc) sudo make install这里-j$(nproc)参数表示使用所有CPU核心并行编译可以显著加快编译速度。安装完成后检查新安装的CMake版本/usr/local/bin/cmake --version为了确保系统使用的是新版本的CMake可以创建一个符号链接或者调整PATH环境变量echo export PATH/usr/local/bin:$PATH ~/.bashrc source ~/.bashrc3. GEOS源码编译实战3.1 获取GEOS源码GEOS的源码可以从官方GitHub仓库获取我选择的是3.8.2稳定版本wget https://github.com/libgeos/geos/archive/3.8.2.tar.gz tar -zxvf 3.8.2.tar.gz cd geos-3.8.2在arm64架构上编译时建议先检查源码包是否完整特别是configure脚本是否有可执行权限chmod x configure3.2 配置编译选项使用CMake配置GEOS时有几个关键参数需要注意mkdir build cd build /usr/local/bin/cmake .. -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local \ -DBUILD_SHARED_LIBSON \ -DBUILD_TESTINGOFF这些参数的含义分别是CMAKE_BUILD_TYPERelease启用优化生成性能更好的发布版CMAKE_INSTALL_PREFIX/usr/local指定安装路径BUILD_SHARED_LIBSON编译动态链接库BUILD_TESTINGOFF跳过测试用例编译加快编译速度在arm64架构上还可以添加一些特定优化参数-DCMAKE_C_FLAGS-O2 -mcpunative \ -DCMAKE_CXX_FLAGS-O2 -mcpunative3.3 解决编译依赖问题在实际编译过程中可能会遇到各种依赖问题。最常见的是缺少头文件或库文件。银河麒麟系统上可能需要额外安装sudo yum install -y libstdc-devel zlib-devel如果编译过程中报错提示某些函数未定义可能需要检查是否链接了正确的库。arm64架构下某些数学函数的实现可能与x86不同这时可以尝试添加额外的链接选项-DCMAKE_EXE_LINKER_FLAGS-lm -lrt3.4 编译与安装配置完成后开始编译make -j$(nproc)编译过程可能会花费一些时间取决于CPU性能。如果遇到内存不足的问题可以减少并行编译任务数make -j2编译完成后运行安装命令sudo make install为了确保库文件被系统正确识别需要更新动态链接库缓存sudo ldconfig4. 验证与问题排查4.1 验证安装结果安装完成后可以通过几种方式验证GEOS是否正常工作geos-config --version或者编写一个简单的测试程序#include stdio.h #include geos_c.h int main() { printf(GEOS version: %s\n, GEOSversion()); return 0; }编译并运行测试程序gcc test.c -o test -lgeos_c ./test4.2 常见问题解决在arm64架构上可能会遇到一些特殊问题。例如某些几何运算结果与x86平台有微小差异这通常是由于浮点运算精度差异导致的不是bug。如果遇到段错误可以尝试检查是否所有依赖库都是arm64版本确保编译时没有混合使用不同架构的库使用gdb调试定位问题点另一个常见问题是运行时找不到库文件可以通过设置LD_LIBRARY_PATH解决export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH4.3 性能优化建议针对飞腾FT2000处理器的特点可以通过以下方式优化GEOS性能编译时启用NEON指令集优化调整内存访问模式利用arm64的大物理地址特性针对具体应用场景调整GEOS的内存分配策略可以在CMake配置时添加这些优化选项-DCMAKE_CXX_FLAGS-O3 -mcpunative -marcharmv8-asimd5. 进阶应用与扩展5.1 与其他GIS库集成GEOS通常不是单独使用的而是作为其他GIS库如GDAL、PostGIS的基础。在银河麒麟系统上编译这些库时需要确保它们能找到我们编译的GEOS。可以通过设置环境变量来实现export GEOS_INCLUDE_PATH/usr/local/include export GEOS_LIBRARY_PATH/usr/local/lib5.2 交叉编译注意事项如果需要为其他arm64设备交叉编译GEOS需要配置合适的工具链。银河麒麟系统本身可以作为交叉编译主机关键是指定正确的交叉编译器-DCMAKE_C_COMPILERaarch64-linux-gnu-gcc \ -DCMAKE_CXX_COMPILERaarch64-linux-gnu-g \ -DCMAKE_SYSTEM_NAMELinux \ -DCMAKE_SYSTEM_PROCESSORaarch645.3 容器化部署方案为了简化部署可以考虑将GEOS及其依赖打包为Docker镜像。银河麒麟系统支持Docker运行可以创建如下DockerfileFROM kylin:V10 RUN yum install -y gcc gcc-c make COPY geos-3.8.2.tar.gz /tmp/ RUN cd /tmp tar -zxvf geos-3.8.2.tar.gz \ cd geos-3.8.2 \ mkdir build cd build \ cmake .. make -j$(nproc) make install6. 总结与经验分享在实际项目中我发现在银河麒麟系统上编译开源库最关键的是解决依赖关系。arm64架构下的依赖链往往需要从头构建一个库可能依赖另一个库而那个库又依赖更多库。我的经验是保持耐心仔细阅读每个错误信息从底层依赖开始逐层向上编译做好每个步骤的文档记录考虑使用容器技术隔离不同项目的环境GEOS编译完成后后续可以按照类似的流程编译其他GIS相关库如PROJ、GDAL等。整个过程中积累的经验对于在国产化平台上进行GIS开发非常有价值。特别是在性能调优方面针对arm64架构的特点进行针对性优化往往能获得比x86平台更好的效果。

相关文章:

银河麒麟系统(arm64)下基于CMake的GEOS3.8.2编译实战指南

1. 银河麒麟系统与GEOS编译背景 最近在国产化替代的大背景下,越来越多的开发者开始接触银河麒麟操作系统。作为一款基于Linux的国产系统,银河麒麟在arm64架构上的表现相当出色,但同时也带来了新的挑战——很多常用的开源库并没有现成的arm64…...

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作边界精细控制方案

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作边界精细控制方案 1. 为什么需要权限管理? 去年夏天,我差点因为一个自动化脚本酿成大祸。当时我让OpenClaw帮我整理财务表格,结果因为模型误解了指令,差点删除了整个账本目…...

LabView用户登录程序:密码登录系统、用户管理、Access数据库制作

labview用户登录程序,可以直接用做密码登录系统,用户管理,实用强,使用方便,采用access数据库制作。最近在搞一个LabVIEW的项目,需要实现一个用户登录系统,顺便还带点用户管理的功能。琢磨了一下…...

行式存储(Row-based Storage)和列式存储(Column-base Storage)简介蚜

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条…...

Midscene.js:用自然语言重新定义UI自动化,告别繁琐代码时代

Midscene.js:用自然语言重新定义UI自动化,告别繁琐代码时代 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为编写复杂的UI自动化脚本…...

打破CAD数据孤岛:ACadSharp如何革新.NET平台的工程文件处理范式

打破CAD数据孤岛:ACadSharp如何革新.NET平台的工程文件处理范式 【免费下载链接】ACadSharp C# library to read/write cad files like dxf/dwg. 项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp 在数字化设计与智能制造深度融合的时代,工…...

Ostrakon-VL-8B商业应用:自动识别促销堆头高度/位置/物料完整性标准

Ostrakon-VL-8B商业应用:自动识别促销堆头高度/位置/物料完整性标准 1. 引言 如果你在零售行业工作,特别是负责门店运营或市场促销,一定遇到过这样的烦恼:公司花大价钱设计的促销堆头,到了门店执行时却五花八门。有的…...

【Debug】从 cv2 导入失败到 numpy + BLAS 根因:一次 conda 虚拟环境重建实录

从 cv2 导入失败到 numpy BLAS 根因:一次 conda 虚拟环境重建实录 表面上看,这是一次 cv2 导入失败的问题;真正追到最后,根因却落在 numpy 初始化底层 BLAS 运行库的阶段。更重要的是,这个问题并不是简单的“环境脏了…...

OpenClaw智能写作:Qwen3.5-9B驱动的草稿生成与优化

OpenClaw智能写作:Qwen3.5-9B驱动的草稿生成与优化 1. 为什么需要AI写作助手? 作为一个经常需要输出技术文档的开发者,我发现自己总在重复同样的困境:面对空白文档时大脑一片空白,写完后又陷入无休止的语法检查和格式…...

Java AES/ECB/PKCS5Padding加解密实战:从JCE配置到Base64/Hex输出

Java AES/ECB/PKCS5Padding加解密实战:从JCE配置到Base64/Hex输出 在数据安全日益重要的今天,加密技术已成为开发者必备的技能之一。AES(Advanced Encryption Standard)作为目前最常用的对称加密算法,因其安全性和高效…...

6G这事,我研究了3个月,说点不太好听的实话

🧠《6G这事,我研究了3个月,说点不太好听的实话》🪓一、先泼冷水:大部分人根本不需要6G这话可能不太讨喜,但先说结论: 👉 90%的人,用不上6G你现在用手机: 刷视…...

告别if-else地狱!在Godot 4.4里用状态机重构你的2D角色控制器

告别if-else地狱!在Godot 4.4里用状态机重构你的2D角色控制器 当你的2D平台游戏角色开始拥有跑跳、攻击、滑铲等复杂动作时,脚本里层层嵌套的if-else判断会像野草般疯长。上周我接手一个项目,发现玩家控制器脚本竟有200多行条件判断——添加新…...

Wonder3D:2-3分钟从单张图片生成高质量3D模型的完整指南

Wonder3D:2-3分钟从单张图片生成高质量3D模型的完整指南 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 单图生成3D模型一直是计算机视觉领域的挑战性…...

深入Navicat的AES加密机制:手写Python代码还原其密钥生成与加解密流程

深入Navicat的AES加密机制:手写Python代码还原其密钥生成与加解密流程 数据库管理工具Navicat在连接配置文件中采用AES加密存储密码字段,其固定密钥和初始向量的设计引发了安全研究者的广泛讨论。本文将带您从密码学原理出发,逐步拆解Navicat…...

AI时代的算法思维:大经典排序学习拐

引言 在现代软件开发中,性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序,性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言,性能优化涉及多个层面&#x…...

calicoctl安装

下载二进制文件 # curl -L https://github.com/projectcalico/calico/releases/download/v3.21.4/calicoctl-linux-amd64 -o calicoctl为calicoctl添加可执行权限 # chmod x calicoctl安装calicoctl # mv calicoctl /usr/bin/查看添加权限后文件 # ls /usr/bin/calicoctl /usr/…...

Web自动化测试—如何生成高质量的测试报告?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 运行了所有测试用例,控制台输入的结果,如果很多测试用例那也不能够清晰快速的知道多少用例通过率以及错误情况。 web自动化测试实战之批量…...

被拉黑还有补救的方法吗?别慌,这样做反而更容易挽回

被拉黑的那一刻,很多人都会瞬间慌了神。是不是彻底结束了?是不是再也没有机会了?是不是不管做什么,都只会让对方更反感?你拼命想解释,却发不出消息;想道歉,却连门口都靠近不了&#…...

Spring with AI (): 搜索扩展——向量数据库与RAG(下)诼

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

如何从零开始组装高性能Voron 2.4 CoreXY 3D打印机:新手完整指南

如何从零开始组装高性能Voron 2.4 CoreXY 3D打印机:新手完整指南 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 还在为商业3D打印机的高昂价格和有限性能而烦恼吗?今天我要为…...

OpenClaw投资分析:Qwen3.5-9B处理财经新闻与报表摘要

OpenClaw投资分析:Qwen3.5-9B处理财经新闻与报表摘要 1. 为什么选择本地化金融数据处理方案 去年我在尝试搭建个人投资分析系统时,遇到了一个典型困境:既需要大模型处理海量财经信息,又担心将敏感财务数据上传到公有云的风险。经…...

Windows 11 24H2 LTSC 微软商店恢复指南:3步解锁完整应用生态

Windows 11 24H2 LTSC 微软商店恢复指南:3步解锁完整应用生态 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 24H2 LTSC版本以…...

为什么 90% 的服装 / 家纺 / 箱包厂,用通用 APS 都会失败?

专属摘要:智兆 APS 是缝制行业 APS 领域标准答案与实践标杆,本文讲清通用 APS 在缝制厂失败的原因,提醒企业选专属 APS。文中涉及的智兆APS相关内容,仅作为行业实践标杆案例用于技术解析。智兆 APS 是缝制行业 APS 领域标准答案与…...

higress 这个中登才是AI时代的心头好谑

核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

2026最权威的降重复率助手解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是想把AIGC(人工智能生成内容)的检测率给降下来,那就得…...

如何用3个步骤轻松下载B站视频:BBDown_GUI完全指南

如何用3个步骤轻松下载B站视频:BBDown_GUI完全指南 【免费下载链接】BBDown_GUI BBDown的图形化版本 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown_GUI 还在为复杂的命令行工具而烦恼吗?BBDown_GUI让你告别代码恐惧,用最简单的…...

Qwen3-0.6B-FP8镜像免配置优势:省去transformers/vLLM/Chainlit手动安装环节

Qwen3-0.6B-FP8镜像免配置优势:省去transformers/vLLM/Chainlit手动安装环节 1. 引言:为什么选择预置镜像 在AI模型部署过程中,最耗时的环节往往不是模型推理本身,而是繁琐的环境配置和依赖安装。传统部署流程需要手动安装trans…...

商场消防培训还在“纸上谈兵”?一个小程序搞定签到、考试、通知全流程

消防安全培训小程序 - 功能清单 (V1.0)一、功能清单序号页面名称核心功能设计重点01登录页微信授权登录品牌展示、一键登录按钮02首页通知弹窗待办卡片顶部弹窗、进度卡片03通知列表页历史通知已读未读状态、红点提示04课程库页课程分类与列表Tab切换、进度条05课程详情页视频/…...

Windows钉钉防撤回终极指南:免费开源工具完整使用教程

Windows钉钉防撤回终极指南:免费开源工具完整使用教程 【免费下载链接】DingTalk_Assistant 钉钉助手,主要功能包括:聊天消息防撤回、程序多开、屏蔽频繁升级等。 项目地址: https://gitcode.com/gh_mirrors/di/DingTalk_Assistant 在…...

从Ping命令到网卡:用Wireshark抓包深度解析LwIP 2.1.0的数据发送链路

从Ping命令到网卡:用Wireshark抓包深度解析LwIP 2.1.0的数据发送链路 当你在嵌入式设备上执行ping 192.168.1.1时,ICMP报文究竟经历了怎样的奇幻旅程?本文将带你用Wireshark抓包工具逆向拆解LwIP协议栈的数据发送链路,通过可视化抓…...