﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-图形，诗意之栖居</title><link>http://www.cnitblog.com/longhulz/</link><description>充满劳绩，然而人诗意地栖居在大地上。
——[德]荷尔德林</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 10:15:37 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 10:15:37 GMT</pubDate><ttl>60</ttl><item><title>64位gdal VS2005 32位机下编译</title><link>http://www.cnitblog.com/longhulz/archive/2011/10/24/76184.html</link><dc:creator>龙湖</dc:creator><author>龙湖</author><pubDate>Mon, 24 Oct 2011 09:07:00 GMT</pubDate><guid>http://www.cnitblog.com/longhulz/archive/2011/10/24/76184.html</guid><wfw:comment>http://www.cnitblog.com/longhulz/comments/76184.html</wfw:comment><comments>http://www.cnitblog.com/longhulz/archive/2011/10/24/76184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/longhulz/comments/commentRss/76184.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/longhulz/services/trackbacks/76184.html</trackback:ping><description><![CDATA[<p><span style="font-family: Lucida Console; font-size: 10pt">被逼得昏头的码农们翻了不少网页，本着别人(包括gdal官方网、google查来的)的&#8220;红宝书&#8221;，一阵鼓捣，那些淘来的，本也是不求甚解，做不得准，一堆尝试，虽然也是成功了，却脱不开舍近求远。按乔布斯的说法，简洁需要更多的劳动，把所得放上来，给忙碌的同道们一点参考，但求省点时间。</span></p>
<p><span style="font-family: Lucida Console; font-size: 12pt"><strong>对于gdal-1.7.3以后的版本，VS2005编译其实很简单。</strong></span></p>
<p><strong><span style="font-family: Lucida Console; font-size: 12pt">在GDAL目录下的nmake.opt文件中，找到大概第一百行多点的，原来是：</span><br /><span style="font-family: Lucida Console; font-size: 12pt">#WIN64=YES</span><br /><span style="font-family: Lucida Console; font-size: 12pt">修改为：</span><br /><span style="font-family: Lucida Console; font-size: 12pt">WIN64=YES</span><br /><span style="font-family: Lucida Console; font-size: 12pt">即如下：</span><br /><span style="font-family: Lucida Console; font-size: 12pt"># Uncomment the following if you are building for 64-bit windows</span><br /><span style="font-family: Lucida Console; font-size: 12pt"># (x64). You'll need to have PATH, INCLUDE and LIB set up for 64-bit</span><br /><span style="font-family: Lucida Console; font-size: 12pt"># compiles.</span><br /><span style="font-family: Lucida Console; font-size: 12pt">WIN64=YES</span></strong></p>
<p><span style="font-family: Lucida Console; font-size: 12pt"><strong>在新建x64平台时，必须选择复制Win32设置，如果你直接编译不行，可能需要安装vcredist_x86.exe(我安装</strong></span><span style="font-family: Lucida Console; font-size: 12pt"><strong>了，但不知这是否是决定因素)。</strong></span></p>
<p><strong><span style="font-family: Lucida Console; font-size: 12pt">当然，gdal-1.7.1编译需修改源代码中的错误，做点额外的步骤。</span><br /><span style="font-family: Lucida Console; font-size: 12pt">源文件&#8220;\gdal-1.7.1\frmts\leveller\levellerdataset.cpp&#8221;的第171行的内容如下： </span><br /><span style="font-family: Lucida Console; font-size: 12pt">{ "?, kPI / 180.0, UNITLABEL_DEGREE }, </span><br /><span style="font-family: Lucida Console; font-size: 12pt">在?号后面加上双引号"，改成如下形式： </span><br /><span style="font-family: Lucida Console; font-size: 12pt">{ "?", kPI / 180.0, UNITLABEL_DEGREE }, </span></strong></p>
<p><span style="font-family: Lucida Console; font-size: 12pt"><strong>默认的情况下，GDAL将会安装到"C:\warmerda\bld"文件夹内，可以改成自己习惯的目录，如可把GDAL_HOME修</strong></span><strong><span style="font-family: Lucida Console; font-size: 12pt">改成如下内容： </span><br /><span style="font-family: Lucida Console; font-size: 12pt">GDAL_HOME = "D:\gdal-runtime"</span></strong></p>
<p><strong><span style="font-family: Lucida Console; font-size: 12pt">makegdal80.sln编译后：配置属性-&gt;NMake-&gt;常规-&gt;"生成"命令行，修改</span><br /><span style="font-family: Lucida Console; font-size: 12pt">原来是：cd $(ProjectDir) &amp;&amp; nmake -f makefile.vc MSVC_VER=1400 DEBUG=1</span><br /><span style="font-family: Lucida Console; font-size: 12pt">修改为：cd $(ProjectDir) &amp;&amp; nmake -f makefile.vc MSVC_VER=1400 DEBUG=1 devinstall</span></strong></p>
<p><span style="font-family: Lucida Console; font-size: 12pt"><strong>确定之后，编译。之后会在gdal-runtime里面生成include、lib、bin等文件夹。</strong></span></p>
<p><span style="font-family: Lucida Console; font-size: 12pt"><strong>至</strong></span><span style="font-family: Lucida Console; font-size: 12pt"><strong>于其它更老的版本，我也是匆忙之间，懒得再去尝试了，欢迎其它人补充。</strong></span></p><br /><strong><span style="font-family: Lucida Console; font-size: 12pt">参考链接：</span><br /><span style="font-family: Lucida Console; font-size: 12pt">ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vccore/html/cb99f72b-8</span><span style="font-family: Lucida Console; font-size: 12pt">c74-48f4-846a-8921b37b97e9.h</span>tm<br />如何：针对 64 位平台配置 Visual C++ 项目<br /></strong>&nbsp; <img src ="http://www.cnitblog.com/longhulz/aggbug/76184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/longhulz/" target="_blank">龙湖</a> 2011-10-24 17:07 <a href="http://www.cnitblog.com/longhulz/archive/2011/10/24/76184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mst引擎微核：Console/Windows支持</title><link>http://www.cnitblog.com/longhulz/archive/2010/09/30/69342.html</link><dc:creator>龙湖</dc:creator><author>龙湖</author><pubDate>Thu, 30 Sep 2010 06:23:00 GMT</pubDate><guid>http://www.cnitblog.com/longhulz/archive/2010/09/30/69342.html</guid><wfw:comment>http://www.cnitblog.com/longhulz/comments/69342.html</wfw:comment><comments>http://www.cnitblog.com/longhulz/archive/2010/09/30/69342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/longhulz/comments/commentRss/69342.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/longhulz/services/trackbacks/69342.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>&nbsp;&nbsp;&nbsp;引擎从何处开始，到何处结束。引擎当然从入口点开始，对c/c++程序员而言，控制台程序始于main()，win32程序始于WinMain()。一个显而易见的事实，它从朴素的程序框架开始，而不是各种夺目的功能和特效。<br>&nbsp;&nbsp;&nbsp;假如我们同时需要控制台和win32窗口呢？需要它的可能理由：<br>&nbsp;&nbsp;&nbsp;①一个方便调试的控制台，在发布时，随时可以把它屏蔽。<br>&nbsp;&nbsp;&nbsp;②从命令行执行不同的模式<br>&nbsp;&nbsp;&nbsp;③尽可能简单的程序入口点<br><br>&nbsp;&nbsp; 一种解决办法比较笨拙，使用预定义，如OGRE：<br>#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br>INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )<br>#else<br>int main(int argc, char **argv)<br>#endif<br><br>&nbsp;&nbsp; 另一种解决办法是在main()和WinMain()中调用同一个函数run()，且通过GetModuleHandle(NULL)获取CreateWindowEx前registerWindowClass需要的HInstance。<br>&nbsp;&nbsp; windowClass.hInstance&nbsp;&nbsp; = winState.appInstance;<br>&nbsp;&nbsp;&nbsp;用全局的winState.appWindow保存创建的窗口句柄。大致代码如下(来源于Torque引擎)，不再赘述。<br><br>struct Win32PlatState<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; HINSTANCE hinstOpenGL;<br>&nbsp;&nbsp;&nbsp;&nbsp; HINSTANCE hinstGLU;<br>&nbsp;&nbsp;&nbsp;&nbsp; HWND appWindow;<br>&nbsp;&nbsp;&nbsp;&nbsp; HDC appDC;<br>&nbsp;&nbsp;&nbsp;&nbsp; HINSTANCE appInstance;<br>&nbsp;&nbsp;&nbsp;&nbsp; HGLRC hGLRC;<br>};&nbsp; </p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>Win32PlatState winState;</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>//--------------------------------------<br>static int run(int argc, const char **argv)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 伪码<br>&nbsp;&nbsp;&nbsp;&nbsp; int ret = mst-&gt;main(argc, argv);<br>&nbsp;&nbsp;&nbsp;&nbsp; Platform::createWindow();<br>&nbsp;&nbsp;&nbsp;&nbsp; Platform::process();</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>&nbsp;&nbsp;&nbsp;&nbsp; return ret;<br>}</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>//--------------------------------------<br>int main(int argc, const char **argv)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; winState.appInstance = GetModuleHandle(NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp; return run(argc, argv);<br>}</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>//--------------------------------------<br>int PASCAL WinMain(HINSTANCE hInstance,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HINSTANCE hPrevInstance,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPSTR&nbsp;&nbsp;&nbsp; lpCmdLine,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nCmdShow)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; std::vector&lt;char *&gt; argv;<br>&nbsp;&nbsp;&nbsp;&nbsp; char moduleName[256];<br>&nbsp;&nbsp;&nbsp;&nbsp; GetModuleFileNameA(NULL, moduleName, sizeof(moduleName));<br>&nbsp;&nbsp;&nbsp;&nbsp; argv.push_back(moduleName);</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>&nbsp;&nbsp;&nbsp;&nbsp; for (const char* word,*ptr = lpCmdLine; *ptr; )<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Eat white space<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (; isspace(*ptr) &amp;&amp; *ptr; ptr++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Pick out the next word<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (word = ptr; !isspace(*ptr) &amp;&amp; *ptr; ptr++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Add the word to the argument list.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (*word) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len = ptr - word;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *arg = (char *) malloc(len + 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strncpy(arg, word, len);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arg[len] = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; argv.push_back(arg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>&nbsp;&nbsp;&nbsp;&nbsp; winState.appInstance = hInstance; <br>&nbsp;&nbsp;&nbsp;&nbsp; int retVal = run(argv.size(), (const char **) argv.front());<br>&nbsp;&nbsp;&nbsp;&nbsp; for(unsigned int j = 1; j &lt; argv.size(); j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free(argv[j]);</p>
<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt" align=left>&nbsp;&nbsp;&nbsp;&nbsp; return retVal;<br>}<br><br>参考链接：<br>&nbsp;&nbsp;&nbsp;Getting the HWND and HINSTANCE of the Console Window<br>&nbsp;&nbsp;&nbsp;<a href="http://bobobobo.wordpress.com/2008/02/03/getting-the-hwnd-and-hinstance-of-the-console-window">http://bobobobo.wordpress.com/2008/02/03/getting-the-hwnd-and-hinstance-of-the-console-window</a></p>
<img src ="http://www.cnitblog.com/longhulz/aggbug/69342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/longhulz/" target="_blank">龙湖</a> 2010-09-30 14:23 <a href="http://www.cnitblog.com/longhulz/archive/2010/09/30/69342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mst引擎微核(序)</title><link>http://www.cnitblog.com/longhulz/archive/2010/09/30/69341.html</link><dc:creator>龙湖</dc:creator><author>龙湖</author><pubDate>Thu, 30 Sep 2010 05:54:00 GMT</pubDate><guid>http://www.cnitblog.com/longhulz/archive/2010/09/30/69341.html</guid><wfw:comment>http://www.cnitblog.com/longhulz/comments/69341.html</wfw:comment><comments>http://www.cnitblog.com/longhulz/archive/2010/09/30/69341.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/longhulz/comments/commentRss/69341.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/longhulz/services/trackbacks/69341.html</trackback:ping><description><![CDATA[<p><span style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;从根源开始，渐及枝叶，发掘微末却核心的引擎技巧，但有所见，心下自喜，故名&#8220;微核&#8221;。至于mst来历，天知地知，先且藏拙。<br>&nbsp;&nbsp;&nbsp;在下面的blog中，本人将从实践中总结点滴的技巧，与引擎原创爱好者交流，不吝见笑于大方。是为序。</span></p>
<img src ="http://www.cnitblog.com/longhulz/aggbug/69341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/longhulz/" target="_blank">龙湖</a> 2010-09-30 13:54 <a href="http://www.cnitblog.com/longhulz/archive/2010/09/30/69341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>引擎大牛，宁有种乎</title><link>http://www.cnitblog.com/longhulz/archive/2010/09/16/68868.html</link><dc:creator>龙湖</dc:creator><author>龙湖</author><pubDate>Thu, 16 Sep 2010 09:35:00 GMT</pubDate><guid>http://www.cnitblog.com/longhulz/archive/2010/09/16/68868.html</guid><wfw:comment>http://www.cnitblog.com/longhulz/comments/68868.html</wfw:comment><comments>http://www.cnitblog.com/longhulz/archive/2010/09/16/68868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/longhulz/comments/commentRss/68868.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/longhulz/services/trackbacks/68868.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: Lucida Console; COLOR: #000000; FONT-SIZE: 12pt">&nbsp;&nbsp; 方今之世，引擎不下百种，皆为舶来品，国内鲜见，就开源的，亦相差不止几里地。外有黎纽斯，内有裘伯君，龙湖本民工，虽系菜鸟，不甘落后，翻出楚兰陵令鼓气张目。欲以愚公和毛公之精神，积硅步而至千里，积小流而成江海。 <br>&nbsp;&nbsp; 荀卿曰：<br>&nbsp;&nbsp;&nbsp;积土成山，风雨兴焉；积水成渊，蛟龙生焉；积善成德，而神明自得，圣心备焉。故不积跬步，无以至千里；不积小流，无以成江海。骐骥一跃，不能十步；驽马十驾，功在不舍。锲而舍之，朽木不折；锲而不舍，金石可镂。蚓无爪牙之利，筋骨之强，上食埃土，下饮黄泉，用心一也。蟹六跪而二螯，非蛇鳝之穴无可寄托者，用心躁也。是故无冥冥之志者，无昭昭之明；无惛惛之事者，无赫赫之功。行衢道者不至，事两君者不容。目不能两视而明，耳不能两听而聪。螣蛇无足而飞，鼫鼠五技而穷。《诗》曰：&#8220;尸鸠在桑，其子七兮。淑人君子，其仪一兮。其仪一兮，心如结兮！&#8221;故君子结于一也。<br>&nbsp;&nbsp; 又曰：<br>&nbsp;&nbsp; 夫骥一日而千里，驽马十驾则亦及之矣。将以穷无穷，逐无极与？其折骨绝筋，终身不可以相及也。将有所止之，则千里虽远，亦或迟或速、或先或后，胡为乎其不可以相及也？不识步道者，将以穷无穷，逐无极与？意亦有所止之与？ 夫坚白、同异、有厚无厚之察，非不察也，然而君子不辩，止之也；倚魁之行，非不难也，然而君子不行，止之也。故学曰：&#8220;迟彼止而待我，我行而就之，则亦或迟或速，或先或后，胡为乎其不可以同至也？&#8221;故跬步而不休，跛鳖千里；累土而不辍，丘山崇成；厌其源，开其渎，江河可竭；一进一退，一左一右，六骥不致。彼人之才性之相县也，岂若跛鳖之与六骥足哉？然而跛鳖致之，六骥不致，是无他故焉，或为之，或不为尔。<br>&nbsp;&nbsp; 道虽迩，不行不至；事虽小，不为不成。</p>
<img src ="http://www.cnitblog.com/longhulz/aggbug/68868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/longhulz/" target="_blank">龙湖</a> 2010-09-16 17:35 <a href="http://www.cnitblog.com/longhulz/archive/2010/09/16/68868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>