10] 建立C帝国(GDAL编译安装以及一般的C库编译步骤)
2011年06月16日
好吧,就让我谈谈C系列的编译问题吧。虽然九形不需要编译,但是,九形(乃至QGIS,GRASS,OpenEV....)的心脏GDAL建议还是自己编译。虽然网络上有现成的二进制库可以用,但是我也经常碰到一些机器装不上的问题--一些所依赖的二进制库版本兼容性问题。而且有些东西根本没必要用上,编译起来简直就是浪费空间,或者你有特殊格式的需求,比如hdf,mysql等等,所以,还是自己打造比较好。为什么Linux有个编译内核的说法?虽然只要不是LFS,gentoo之类的BT发型版都有个已经可以用的内核可用,但还是有人喜欢自己编译内核,因为自己编译的适合自己。这不是个性的问题,是可用性的问题。
像我这样的懒人一般不自己编译内核,哈~但是我从来都是自己编译GDAL。
其实关于GDAL编译我以前已经写得很清楚了,在啄木鸟上我曾经写了一篇很完整的。找找看哈~~哦,在这里:
http://wiki.woodpecker.org.cn/moin/lilin/gdal-introduce
那还有什么好说的呢?
我要介绍的是如何编译同类型的库。
C和C++双剑合壁是天下用的人最多的编程语言,这一点不容质疑。有人说Java第一,好吧,第一就让他们第一吧,满足了虚荣心又怎么样呢?但三国鼎立我想应该是天下第一没有人有异议了。什么?那里有热爱C#的朋友反对,好吧~让它们四个凑一桌应该可以天下无敌了吧~
四个编程语言的粉丝团只要碰到一起都会掐起来,但是有一点他们有共识,那就是大家都要编译。
相信大家都觉得编译是一道坎。相信大多数小师妹面对一整屏的字符和最后一行的XXX error都会不知所措。首先会“咦”得惊叹一下错误都错得这么邪恶且强大,然后叫“妈~~”?~~哈哈哈,玩笑,当然不会去叫妈拉,一般是叫班上最高最帅最厉害的男生过来帮忙(因为我不高不帅,所以像这一类好事一般都没有我的份)。但是真想要在程序界留下,就一定要踏过这道坎。
这是极其痛苦的一道坎。是千万次失败,千万次痛苦和绝望后一点点积累起来的。注意,是绝望!没有绝望是不会体会到成功后的重生般的狂喜。没有克服绝望是不会一路走过来的,因为他(她)没有理由走下去。
好了,下面开始说正经的。
对于C和C++的东西有两套编译方案。
一套是微软的sln,dsp,dsw。这套方案简便易行。只要双击点开,然后点个按钮,就刷刷得下来了。而且在很多流行的C/C++库中都有赠送微软方案。譬如ACE。那编译起来是相当顺畅。但是这种库是很少的。去SourceForge搜下,这种买一送一的项目是少数(除了只运行在windows平台上的除外)
因为这套方案脱离不了visual studio。就是说你必须购买微软的操作系统,和visual studio。当然,买了visual studio还不算完,这么强大的东西你不会用了吧~~那你再买套MSDN吧!好了,你也许还要画画流程图写写文档啥的,甚至还要赶流行连个数据库啥的,于是还有一套office在等着你,当然Office不是噩梦的结束,随着你的水平提高,你再也看不上Excel甚至Access。来个大型数据库解决方案吧。好了,SQL Server在向你招手了……
你说这样的牛B组合得花多少钱?
(我觉得怎么着也得十来万块吧)
十来万?那是升级前!
别嫌少,还是批发打折跳楼价~~
ok,ok,不说了,再说就大腕了……
我就编译链接个没有GUI的东西,犯不上吧~是的,这是微软的逻辑,能上的都给你套上。至于你用多少,人家不管。
我恼的不是这些,大不了只装个visual studio了事,其他的该干嘛干嘛去。我真正恼的是visual studio越来越大,动不动多少G多少G,把我的老硬盘逼得是相当可怜啊!更可恶的是ArcEngine居然要绑定visual studio的最新版本!简直就是流氓嘛!
还好我们有另外一套方案--makefile方案。
我第一次在linux下编译库的时候,屏幕上向上飞奔的字符顿时让我有了飞翔的感觉。我突然在那一刻爱上了编译。如果我的机器快的话我想我会装个 gentoo或者LFS玩玩的(我曾经花了整整一个白天去编译QT库,后来实在受不了)。其实看到满屏字符升起的感觉非常好。诸位也可以试下。那是相当黑客!
为什么要有makefile?为什么不都搞成dsp?
因为dsp也是makefile,只是微软把它定义成只有自己才认识的格式,并把打开方式改成了visual studio。如果你用记事本打开dsp,或者vcproj,你可以看到,它们都是文本,dsp更接近makefile,而vcproj是xml。原来的 visual studio6支持导出makefile,而到.net版本后突然不支持了!
狼子野心啊~~~~
简单得说,其实visualstudio也没有什么,就是把东西整合在一起,然后帮你写makefile而已。
那那么多牛人为什么都不用IDE自动生成呢?因为一个根本的原因是除了windows,大家一致都认为桌面不是操作系统的事情,所以大多数牛人什么桌面都不装,一天只开一个Emacs,在里面写程序编译并且同时听歌。而他们这样就感到很满足了。
那么linux下的makefile是什么样子的呢?打开一个GnuMakefile看看
哇~~这么长!这么多!
不要怕嘛,怎么看到长点的文件就怕呢?其实这都不是我们自己写的(我们大可以拉出去给MM们炫耀说是自己手工一行行写的……)。我们有诸如AutoMake之类的工具来生成makefile,要记住,世世代代的程序员都是懒惰的。他们巴不得什么都不干,机器就刷刷得跑!
而makefile看起来似乎很邪恶,但里面不过是一堆的shell语句对环境进行一顿配置,然后把所有cpp文件列出来就是了,最后调用gcc或者lc 之类的编译器编译,最后链接。为什么大牛们喜欢用makefile呢?因为可以进行shell配置,然后把系统相关的环境变量读取出来,临时设置一些路径,等等……而这在IDE里面就不能随心所欲了。这很重要吗?当然很重要,这对于相对路径相对系统的编译来说是相当重要的,可以保证在大多数情况下一次通过。
一切终归于makefile!
这很震惊吗?你用过Java吗?知道Ant干什么用的吗?(C#我不熟,不过看起来也像有一个makefile的写法) 好了,看来天下的牛人都想到一起去了。
我不教大家怎么看makefile。这对于编译也一点帮助都没有(对于我们这样的非牛人来说)。毕竟大多数时候大家都不要自己写(Linux下有个IDE不错,叫anjuta,虽然中文支持不好。但是毕竟是个ide,其他code::block也不错。似乎也跨平台)。
那怎么编译makefile呢?首先解压源码包,然后去解压目录下查找一个INSTALL的文件。认真看!什么?看不懂?我四级没过的人都可以看个大概,你咋就看不懂呢?什么态度嘛~
好了,这就是我要教给你的所有,看编译指南,没有比这个更管用的了。
一般来说,makefile编译类型的,在windows下就是修改配置文件(如果有的话),然后运行visual studio的控制台(不能用普通的控制台cmd,因为需要注册一些环境)。然后
nmake /f makefile
上面是编译链接
nmake /f makefile install
上面是把所有生成的东西全部拷贝到一个文件夹下。
在类Unix系统下一般的步骤是:
./configure
上面是运行工具检查环境依赖生成makefile
make
上面是编译链接
sudo make install
把所有生成的库或者程序和文档安装到系统(一般是在/usr/local目录下,当然有分成bin,lib,install等等几种啦)。
sudo ldconfig
让系统认到刚刚安装的库。(如果是库的话,如果不是库,可以不管)
不需要改配置文件。系统会自己认。有什么依赖不存在,在configure步骤中都会报错。你可以根据提示加装依赖。然后继续configure,如果已经有安装,那么可能安装的路径不标准,系统认不到,或者dev包(include等)没有安装(很多是这个问题)。另外一些配置可以通过 configure来配置,比如我要生成静态链接库,而不要动态的。可以用./configure --help来察看并且设置,一般参数是用类似--with-XXX=XXX的形式来配置的。
自动识别是用Makefile和Linux的最大的优点。
一般在configure通过后make和make install是不会出问题的。如果出问题,那是你机品的问题了!碰到这种情况,1,你把输出好好回溯一遍,看看哪里出错。这其实并不是很痛苦的事情。不要看到满屏的字符就发怵,要找到错误其实很容易。很经常是某个文件找不到,或者是类型转换出错。文件找不到,那么你要查查你的依赖包是否装全或者完整,如果是类型转换出错或者找不到,那么就是代码问题或者是编译器问题。有的时候编译器版本的高低不兼容会影响这个。没办法,谁叫C++这么多厂商,C++标准委员会定标准也没个谱的。
2,如果实在没辙,把错误截下来google吧。
这样基本可以把PostgreSQL,PostGIS,GEOS,Proj4,GDAL,GRASS,QGIS,MapServer一路编译下来,你建成一个C的GIS开源帝国了。这样你可以把SDE,ArcGIS,ArcIMS暂时扔到一边去了。
3,当然如果你是女生,这时候,尽管大声叫周围的帅哥过来帮你瞧瞧!当然,尽量也给像我这些不帅的GG们一些机会吧~~呵呵
发表评论
-
Sharepoint+MOSS分册第2轮筛选结果文章列表
2012-01-20 00:34 730Sharepoint+MOSS分册第2轮筛 ... -
在 Android 平台上应用 Berkeley DB 11gR2 SQL(drop-in模式)(转http://www.cnmsdn.com/html/201004/1270362092ID3134.html)
2012-01-20 00:34 787在 Android 平台上应用 Ber ... -
编程心得
2012-01-20 00:34 679编程心得 2011年03月21日 转自:http://w ... -
在 C# 中通过 P/Invoke 调用Win32 DLL
2012-01-20 00:34 764在 C# 中通过 P/Invoke 调用Win32 DLL ... -
http://www.cnblogs.com/yungboy/archive/2010/05/28/1746376.html
2012-01-20 00:33 866http://www.cnblogs.com/yungboy/ ... -
Android开发之Android体系架构介绍
2012-01-19 01:31 1565Android开发之Android体系 ... -
EGLIBC库介绍
2012-01-19 01:31 602EGLIBC库介绍 2011年05月05 ... -
给Win32 GUI程序调试信息输出方法
2012-01-19 01:31 1356给Win32 GUI程序调试信息输出方法 2011年09月2 ... -
SAMSUNG S3C2440的简易BootLoader ㈢
2012-01-19 01:31 607SAMSUNG S3C2440的简易BootLoa ... -
Application/Session/Cookie/viewstate/Cache/隐藏域/查询字符串的比较
2012-01-17 00:48 649Application/Session/Cookie/view ... -
v4l2驱动编写篇(2)
2012-01-17 00:48 1187v4l2驱动编写篇(2) 2011年04月01日 应用可 ... -
file_operation结构体详解
2012-01-17 00:48 1011file_operation结构体详解 2011年06月22 ... -
电脑蓝屏自动关机故障的检修方法
2012-01-17 00:48 656电脑蓝屏自动关机故障的检修方法 2011年09月23日 ... -
Video4Linux
2012-01-17 00:48 776Video4Linux 2011年12月05日 Vide ... -
HK-2000数据采集仪WEB服务器BOA的移植方法
2012-01-15 19:37 685HK-2000数据采集仪WEB服务器BOA的移植方法 200 ... -
如何为linux嵌入式开发建立交叉编译环境(2.4内核)
2012-01-15 19:36 698如何为linux嵌入式开发建立交叉编译环境(2.4内核) 2 ... -
【转】如何为嵌入式开发建立交叉编译环境
2012-01-15 19:36 754【转】如何为嵌入式开发建立交叉编译环境 2009年10月26 ... -
EGLIBC库介绍
2012-01-15 19:36 549EGLIBC库介绍 2011年05月05 ... -
c库函数qsort使用方法实例
2012-01-15 19:36 548c库函数qsort使用方法实例 2010年01月03日 ...
相关推荐
本资源是【gdal-3.5.3】的编译库,其中里面包含 【bin】文件 【include】文件 【Lib】文件 【Scripts】文件 【share】文件 用途广泛,可以用于C++,JAVA,UEC++等集成进行栅格数据的解析与读取使用。 相关编译...
编译GDAL通常涉及到复杂的步骤,包括安装各种依赖项(如PROJ、GEOS、JPEG、PNG等),配置选项的选择,以及处理潜在的兼容性问题。这个压缩包包含了所有必要的依赖库,使得用户可以直接将这些库集成到他们的项目中,...
要在Qt MinGW环境下使用预编译的GDAL库,你需要完成以下步骤: 1. **安装Qt MinGW**:确保你已经安装了适合的Qt版本,且是基于MinGW的编译器。可以通过Qt官网下载相应版本的Qt SDK,选择MinGW编译器选项。 2. **...
此压缩包“GDAL 2.4.3 编译完成的Android库(包含so可直接用).zip”提供了GDAL 2.4.3版本针对Android平台编译好的库文件,其中包含了可以直接在Android应用中使用的.so动态链接库。 GDAL的核心功能是支持多种地理...
GDAL 在 Linux 下的编译实现需要经过安装、编译和调用三个步骤。首先,需要安装 GDAL,然后编译 GDAL,最后调用 GDAL。整个过程需要使用到多种工具和命令,如 apt-get、./configure、make 和 make install 等。
gdal在linux上安装需要的文件比较多,附件包含gdal2.2.3及依赖的文件: proj-4.9.3.tar.gz geos-3.6.2.tar.gz jpegsrc.v9b.tar.gz hdf-4.2.13.tar.gz hdf5-1.10.1.tar.gz netcdf-4.4.1.tar.gz gdal-2.2.3.tar....
描述中提到的"GDAL编译生成的dll以及GDAL引用的dll",是指GDAL的核心动态链接库(dll),如gdal_csharp.dll、ogr_csharp.dll等,它们包含了GDAL的主功能。而"GDAL注册文件"通常是指那些用于初始化和配置GDAL环境的...
在linux(arm架构)上编译的gdal库及其第三方库,内含一个编译脚本。具体包括:gdal-3.1.2、geos-3.8.1、proj-7.1.0、sqlite3和tiff-4.6.0。Geospatial Data Abstraction Library (GDAL)是使用C/C++语言编写的用于...
需自己编译的版本c++版本gdal,提供gdal3版本必须的proj和sqlite库。可根据该版本进行编译,编译方法链接:https://blog.csdn.net/wenming111/article/details/100887730
2023-05-10的最新版,Windows 64位的GDAL 3.7.0库。Debug时用debug目录下的bin和lib,Release时用release目录下的bin和lib。Debug和Release通用include文件夹下的头文件。
基于C++的gdal3.5.3编译好的文件,包括编译所需其他库编译好的geos,proj,curl,tiff,cmake,另外还有编译的教程,请查看https://blog.csdn.net/qq_39397927/article/details/136164086?spm=1001.2014.3001.5501,...
例如,`libgdal.a`是静态库,可以在编译时链接到应用程序中,将GDAL的功能合并到二进制文件中。而`libgdal.so.*`是动态链接库,通常用于节省磁盘空间和内存,因为多个程序可以共享同一份库文件。这里的`libgdal.so....
在给定的资源中,我们看到标题提到的是"VS2015编译好的GDAL 2.4.4",这意味着这个压缩包包含的是在Microsoft Visual Studio 2015(VS2015)环境下编译构建的GDAL版本为2.4.4的库文件。VS2015是一个流行的C++开发环境...
通过centos7.9编译gdal的动态库与可执行文件,方便centos版本的docker镜像。
编译环境:详情可参考“Visual Studio 2019 (vs2019) C++ 环境配置GDAL” ...本资源仅包括gdal3.5.2资源以及其运行所依赖的库 2024年3月8日 更新:增加x64编译结果,验证无误 详细库编译过程见下面链接: ...
VS2019编译好的GDAL3.3.1库包含了多个重要的组件,这些组件在地理信息系统(GIS)和遥感数据处理中扮演着关键角色。GDAL(Geospatial Data Abstraction Library)是一个开源的C++库,用于处理各种地理空间数据格式,...
编译成功后,执行安装步骤,将GDAL的库文件、头文件等安装到指定的目录。 5. **测试与验证**:编译安装完成后,可以运行GDAL提供的测试程序,检查编译是否成功。此外,通过编写简单的C++程序,尝试链接GDAL库并调用...
本篇文章将详细介绍如何在Windows环境下,使用Visual Studio 2010编译GDAL 1.8.1版本,并提供一个实例制作步骤。 **1. 获取源码** 首先,你需要从GDAL的官方网站或GitHub仓库下载GDAL 1.8.1的源代码。解压到一个...
在描述中提到的“GDAL编译比较麻烦”,这是因为GDAL依赖于一系列的库,如PROJ、GEOS、JSON-C等,这些库的配置和安装过程复杂,需要对编译环境有深入的理解。此外,GDAL支持多平台,包括Windows、Linux和macOS,而...
通过以上步骤,你已成功编译并安装了GDAL的静态库,可以在自己的项目中使用。值得注意的是,静态库在大型项目中可能会导致可执行文件体积较大,且不便于更新库文件。因此,在选择静态库还是动态库时,应根据项目需求...