`
zc373zc
  • 浏览: 16277 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

10] 建立C帝国(GDAL编译安装以及一般的C库编译步骤)

 
阅读更多

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们一些机会吧~~呵呵
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics