GDAL编译过程中的几个问题

2024-09-01 09:18
文章标签 编译 问题 几个 过程 gdal

本文主要是介绍GDAL编译过程中的几个问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

windows下面:

首先是DOS下访问文件(cd命令) 的问题。
今天要去build一个open source,但是安装那个文件要通过DOS窗口。我想进入E:/assignment/gdalOS,然后运行一个叫做makefile.vc的文件。但是我刚开始怎么都进不去这个目录。我是这么用的:cd E:/assignment/gdalOS,但是结果是空了一行,继续显示那个垃圾C:/Documents and Settings/Administrator>,我搜了下,发现原来这个cd 命令只是用于目录之间的转移 ,而这个涉及到盘符之间的进出则要先进入盘符,即:
1.直接在C:/Documents and Settings/Administrator>后面敲 E: 然后回车,下一行出现:E:/> (注意:若是想进入C盘,则要键入cd C:/否则还是会进入c:/document什么什么的默认地方)
2.在E:/>后面敲 cd assignment/gdalOS 然后回车,出现路径:E:/assignment/gdalOS
3.在后面输入想要的命令即可
其次是提示“’nmake’ 不是内部或外部命令,也不是可运行的程序或批处理文件 ”错误。我找了很多东东,搞了今天一下午总算是给搞定了。
原因是VC的环境变量没有设置好。那么到底如何设置才好呢?网络上大多数和它的官方文档(GDAL/OGR开源代码)都说运行上VC安装路径上C:/Program Files/Microsoft Visual Studio 8/VC/bin下的vcvars32.bat就可以了。我发现这个批处理窗口只是一闪而过,也就是说环境变量也只是设置好了立刻就没有了。当我在项目目录路径下输入命令nmake /f makefile.vc的时候还是提示这个错误。于是我就按一个哥们的做法:打开cmd的DOS窗口(这里也可以直接用VS2005自带的Visual Stdio 2005命令提示工具来打开),把VC安装路径上的vcvars32.bat直接拖到该DOS窗口上,然后回车,然后cd进入项目目录下输入命令nmake /f makefile.vc即可了。但是我编译下来发现好多的都无法编译,提示无法解析的错误,我猜想是代码本身的问题,这一点回头再说吧。

续上
总算给搞定了(又花了我三个小时,晕),代码本身果然有点问题:
项目根目录下 frmts文件(frmts /leveller/levellerdataset.cpp中 )的171行{ “?, kPI / 180.0, UNITLABEL_DEGREE },少了个引号,加上去就可以了。
最后总结下,如何编译GDAL1.6.1
1.把 frmts文件的171行{ “?, kPI / 180.0, UNITLABEL_DEGREE },加上引号;
2.改动根目录下nmake.opt文件的GDAL_HOME的地址,当然也可以不用改。这个地址是后续所安装GDAL的根目录。
3.打开“Visual Stdio 2005命令提示”,cd到项目根目录下,输入命令:nmake /f makefile.vc,回车,OK。

至此,编译工作已经完成。接下来再记录下一些方便开发的后续工作(以下来自http://www.3sdn.net/giszt/osgis/2008-12-11/148.html ):
1.安装GDAL:
在上面编译完成后,继续在DOS窗口中输入:nmake /f makefile.vc install。这会增加bin,data,html三个文件夹。继续输入:nmake /f makefile.vc devinstall,这会增加include 和 lib两个文件夹。
2。译C#源码(可选,我暂时不用,先放这里做个MARK)
cd 到C:/gdal-1.5.0/swig/csharp

进入C#源文件所在的文件夹,然后再输入:nmake /f makefile.vc 编译完成后,将会生成以下8个dll文件:
gdal_csharp.dll、gdalconst_csharp.dll、ogr_csharp.dll、osr_csharp.dllgdal_wrap.dll、gdalconst_wrap.dll、ogr_wrap.dll、osr_wrap.dll。
将以上8个dll文件复制到安装目录的bin文件夹下。
3.使用GDAL:
在VS开发中,要先在工具(Tools)-> 选项(Options)-> Projects(vc6.0为Directories)中添加GDAL的lib和include路径,然后把生成的dll文件放在可执行文件所在的文件夹里或直接放在system32文件夹内即可。
如果要用到bin目录中的exe程序,则要创建环境变量,即把GDAL的安装目录的bin路径(如C:/gdal-1.6.0/bin)添加到环境变量中的Path。添加方法为:右击“我的电脑”-> “属性”->”高级”,点击“环境变量”按钮,在系统变量里找到Path,如果没有可添加Path变量,然后把路径添加进去,多个路径以分号分隔。

PS: 于2009.10.12
以上经过我验证,这种编译并不最优,在nmake.opt文件中修改MSVC_VER的值为1500,删除原先编译出的东东,重新编译(VS2008),OK。
另外,要使得编译后bin目录中自带的application能正常使用,以及自己的程序可以解析出完整的数据,则需要设置环境变量GDAL_DATA,其值为编译后的Data的路径,具体可以参见GDAL 的FAQ。
对于S_57格式文件,要完整解析数据,需要适当设置环境变量OGR_S57_OPTIONS(理论上是,但是我在程序中使用CPLSetConfigOption()似乎没用,这点等我回头解决了再谈。)

这篇关于GDAL编译过程中的几个问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126525

相关文章

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基