银河麒麟编译gdal
时间: 2025-02-18 13:44:59 浏览: 175
### 编译安装GDAL于银河麒麟操作系统
#### 准备工作
确保开发环境已配置完毕,包括但不限于GCC编译器、Python解释器以及必要的库文件。对于特定版本需求,如Python 3.11,在ARM架构下的银河麒麟Docker环境中可通过指定`./configure --with-python=python3.11`来设置[^2]。
#### 获取源码
访问GDAL官方网站获取最新稳定版源码包或是通过Git克隆仓库至本地。考虑到不同版本间的兼容性差异,建议参照官方文档中的构建指南选择合适的分支或标签进行下载[^1]。
#### 配置选项
进入解压后的GDAL源码根目录后运行配置脚本。此过程允许自定义安装路径及其他依赖项链接方式。例如,在支持Python绑定的情况下可以加入如下参数:
```bash
./configure --with-python=/usr/bin/python3.11
```
上述命令假设系统中存在对应版本的Python解释器位于默认位置;如果实际情况有所不同,则需调整路径指向实际安装处。
#### 编译与安装
完成预处理阶段之后即可调用Make工具启动正式编译流程:
```bash
make -j$(nproc)`表示根据CPU核心数自动分配任务数量),而后续的安装操作可能涉及到权限提升,请按提示输入管理员密码继续。
相关问题
银河麒麟编译osg显示牛正常但是osgearth显示为白球
<think>我们正在处理用户关于在银河麒麟系统上编译OSG和OSGEarth时,osg编译正常但osgearth显示为白球的问题。
根据用户提供的引用[1]和引用[2],我们可以知道用户是在银河麒麟系统上编译了osg3.4和osgearth2.8(或osg3.6.5和osgearth3.0)并遇到了问题。
显示白球通常意味着地球纹理没有正确加载,可能的原因包括:
1. 数据文件路径不正确,导致地球文件(如simple.earth)无法加载。
2. 依赖库缺失或版本不匹配,特别是GDAL、PROJ、GEOS等地理空间库。
3. 显卡驱动或OpenGL支持问题。
4. osgEarth插件没有正确编译或加载。
根据引用[2]中提到的依赖库编译顺序和注意事项,我们可以重点检查依赖库的编译情况。
解决步骤:
1. 确认地球文件路径:在代码中,`osgDB::readNodeFile("simple.earth")` 需要确保simple.earth文件在程序运行目录下,或者指定绝对路径。同时,simple.earth文件内引用的地图服务(如影像和地形服务)需要网络可达。
2. 检查osgEarth插件:确保编译osgEarth时,生成了osgdb_osgearth.dll(或.so)等插件,并且在运行时能够被OSG的插件系统找到(通过环境变量OSG_FILE_PATH或OSG_LIBRARY_PATH设置)。
3. 检查依赖库:osgEarth依赖GDAL、PROJ、GEOS、CURL等库。需要确认这些库是否正确安装,并且版本与osgEarth兼容。特别要注意的是,在编译这些依赖库时,需要添加-fPIC选项(位置无关代码)以确保能够被正确链接。
4. 检查运行时链接:使用ldd(Linux)或ldd(麒麟系统)检查编译出的程序,确认所有动态库都能正确链接。特别是osgEarth相关的库和其依赖的第三方库。
5. 检查网络连接:如果simple.earth中使用了在线地图服务(如OpenStreetMap),需要确保网络连接正常,并且没有防火墙阻止。
6. 查看日志:在运行程序时,可以设置OSG的环境变量来输出调试信息,例如:
export OSG_NOTIFY_LEVEL=INFO
运行程序,查看控制台输出,看是否有加载错误信息。
7. 检查显卡驱动:确保系统安装了合适的显卡驱动,并支持OpenGL。可以运行osg自带的例子(如osgviewer cow.osg)来验证。
8. 如果以上步骤都没有解决问题,可以尝试重新编译osgEarth,并确保在CMake配置阶段,所有依赖库都被正确找到,并且编译选项正确。
根据引用[2]中提到的编译依赖库的顺序和注意事项,特别注意:
- zlib, png, curl, freetype, proj4, geos, gdal, jpeg, ffmpeg等库的编译。
- 编译ffmpeg时添加`--extra-cflags=-fPIC`选项,避免链接冲突。
- 编译freetype时添加`CFLAGS=-fPIC`(即`./configure CFLAGS=-fPIC`)。
由于用户是在银河麒麟系统(基于Linux)上编译,所以动态库的路径设置也很重要。可以通过设置环境变量LD_LIBRARY_PATH来包含所有第三方库的安装路径。
具体操作建议:
步骤一:验证地球文件
将simple.earth文件放在程序同目录下,并检查其内容。一个简单的simple.earth内容示例:
```xml
<map name="Simple Map" type="geocentric">
<image name="world" driver="arcgis">
<url>http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer</url>
</image>
</map>
```
或者使用本地离线数据。
步骤二:设置环境变量
在运行程序前,设置动态库路径和OSG插件路径,例如:
```bash
export LD_LIBRARY_PATH=/path/to/your/osg/lib:/path/to/your/osgearth/lib:/path/to/your/thirdparty/lib:$LD_LIBRARY_PATH
export OSG_FILE_PATH=/path/to/your/osgearth/data:$OSG_FILE_PATH
export OSG_LIBRARY_PATH=/path/to/your/osgPlugins-3.6.5:$OSG_LIBRARY_PATH # 版本号根据实际情况调整
```
步骤三:检查插件
确认在osgPlugins目录下存在osgdb_osgearth.so等插件。如果不存在,说明osgEarth编译时没有生成插件,需要重新编译osgEarth。
步骤四:重新编译osgEarth
如果上述步骤无效,尝试重新编译osgEarth,并确保:
- 在CMake配置时,GDAL、PROJ等依赖库被正确找到。
- 编译选项正确,特别是添加了-fPIC选项的依赖库。
步骤五:查看运行时错误信息
通过设置环境变量获取详细日志:
```bash
export OSG_NOTIFY_LEVEL=DEBUG
./your_program
```
查看输出,可能会发现具体的错误原因。
如果问题仍然存在,可能需要检查系统是否满足osgEarth的硬件要求(如OpenGL版本),以及是否有其他系统级问题。
由于用户提到osg编译正常,说明OSG基础库没有问题,问题集中在osgEarth的依赖和配置上。
希望这些步骤能帮助用户解决问题。</think>### 银河麒麟系统下OSGEarth显示白球的排查与解决方案
当OSG编译正常但OSGEarth运行时显示白球(无纹理地球模型),通常由以下原因导致。请按顺序排查:
#### 1. **地球文件路径问题** [^1]
- 检查代码中`simple.earth`文件的路径:
```cpp
viewer->setSceneData(osgDB::readNodeFile("simple.earth")); // 需确保文件在可访问路径
```
- **解决方案**:
- 使用绝对路径:`osgDB::readNodeFile("/full/path/to/simple.earth")`
- 设置环境变量指定资源目录:
```bash
export OSG_FILE_PATH=/path/to/earth_files:$OSG_FILE_PATH
```
#### 2. **依赖库未正确链接** [^2]
OSGEarth依赖的关键库(如GDAL/PROJ/GEOS)若未完整编译,会导致纹理加载失败:
- **验证步骤**:
```bash
ldd /path/to/osgPlugins-3.6.5/libosgdb_osgearth.so # 检查依赖库是否齐全
```
- **常见缺失库**:
- GDAL(地理数据抽象层)
- libcurl(网络数据传输)
- libgeos(几何计算引擎)
- **解决方案**:
重新编译依赖库并添加`-fPIC`参数:
```bash
# 编译GDAL示例
./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC"
make && sudo make install
```
#### 3. **网络服务配置错误**
`simple.earth`可能引用在线地图服务(如OpenStreetMap),网络不通会导致白球:
- **验证方法**:
检查`simple.earth`内容:
```xml
<image driver="xyz">
<url>https://tile.openstreetmap.org/{z}/{x}/{y}.png</url>
</image>
```
- **解决方案**:
- 确保服务器可访问:`curl https://tile.openstreetmap.org/0/0/0.png`
- 或改用离线地图数据源
#### 4. **显卡驱动/OpenGL兼容性问题**
- **排查步骤**:
```bash
glxinfo | grep "OpenGL version" # 检查OpenGL版本(需≥3.3)
OSG_GL_ERROR_CHECK=1 ./your_program # 启用OpenGL错误检测
```
- **解决方案**:
- 更新显卡驱动
- 运行OSG内置测试:`osgviewer cow.osg` 验证渲染是否正常
#### 5. **插件未加载**
OSGEarth需通过插件加载地球模型:
- **检查方法**:
```bash
export OSG_NOTIFY_LEVEL=INFO # 启用详细日志
./your_program # 观察输出中是否出现"osgEarth"插件
```
- **解决方案**:
确保编译时启用`OSGEARTH_USE_QT=OFF`(除非需Qt集成),并确认生成以下插件文件:
```
osgPlugins-3.6.5/libosgdb_osgearth.so
osgPlugins-3.6.5/libosgdb_osgearth_engine_mp.so
```
#### 6. **环境变量配置**
关键环境变量缺失会导致资源加载失败:
```bash
# 必须设置(路径根据实际安装位置调整)
export LD_LIBRARY_PATH=/opt/osg/lib:/opt/osgEarth/lib:$LD_LIBRARY_PATH
export OSG_LIBRARY_PATH=/opt/osg/lib/osgPlugins-3.6.5
export GDAL_DATA=/opt/gdal/share/gdal
```
### 推荐诊断流程
1. **基础验证**:
```bash
osgearth_version # 检查osgearth是否能运行
osgearth_viewer simple.earth # 测试官方示例
```
2. **日志分析**:
```bash
export OSG_NOTIFY_LEVEL=DEBUG
./your_program 2> log.txt # 检查错误日志
```
3. **依赖库重建**:
按顺序编译:zlib → libpng → libcurl → proj → geos → gdal → osg → osgEarth(所有库编译时需加`-fPIC`)
QGIS编译 银河麒麟
QGIS 编译在银河麒麟操作系统上是一个相对专业的话题,涉及到开源地理信息系统软件 QGIS 和国产操作系统银河麒麟之间的适配工作。
### 一、环境准备
首先需要确认你所使用的银河麒麟版本是否支持所需的依赖库以及开发工具链。目前银河麒麟有多种衍生版,如 Kylin OS V10 等,在开始之前最好访问官方文档获取最新的兼容信息和支持状态。
#### 安装必要的构建工具和依赖项:
```bash
sudo apt-get update && sudo apt-get upgrade -y
# 下载并安装基本的编译环境
sudo apt-get install build-essential cmake git python3-dev qt5-default qgis-data proj-bin gdal-bin libproj-dev libgdal-dev libqt5svg5-dev sqlite3 libspatialindex-dev libpqxx-6.4 libgeos++-dev postgresql-server-dev-all libqscintilla2-qt5-dev python3-pygments doxygen graphviz xsltproc xmlto asciidoc
```
以上命令将帮助我们准备好编译所需的各种资源包,包括但不限于 Qt 框架、GDAL 库等关键组件。
### 二、获取源码及编译配置
接下来从 [GitHub](https://github.com/qgis/QGIS) 或者其他可信渠道下载最新稳定分支或标签对应的 tarball 文件;如果是通过 Git 克隆,则可以指定特定版本进行检出操作。之后按照官方提供的指南完成进一步的操作步骤:
```bash
cd /path/to/downloaded/source/
mkdir build && cd $_
cmake ..
make -j$(nproc)
sudo make install
```
这里假设读者已经具备一定的 Linux 命令行基础,并能够理解上述流程的大致含义。
请注意实际过程中可能会遇到各种各样的问题,例如缺少某些特殊的依赖关系或者因平台差异而需调整 CMake 参数设置等情况。此时建议查阅相关的社区论坛寻求解决方案或是参考他人分享的经验贴。
另外值得注意的是,由于 QGIS 功能模块众多且复杂度较高,初次尝试自行编译部署并不容易成功,对于普通用户来说直接采用系统自带的应用商店提供的预编译二进制包或许是更佳的选择。
阅读全文
相关推荐















