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