the LEDAPS云掩膜模块lndcsm移植到windows下,代码本身改动不大,使用接口不变。依赖的库有hdf4,hdfeos,因此编译程序需要包含的静态库有:gctp.lib,hdfeos.lib,hd426m.lib,hm426m.lib。
之后进行编译,一系列报错:
1. error C2466: cannot allocate an array of constant size 0d:\Migration\lndcsm-mig\lndcsm\csm.c
error C2133: 'b6histogram2' : unknown sized:\Migration\lndcsm-mig\lndcsm\csm.c
error C2057: expected constant expressiond:\Migration\lndcsm-mig\lndcsm\csm.c
将int b6histogram2[HISTSIZ] 中HISTSIZ 直接替换成数值1024,其实在程序中已经定义HISTSIZ的值为1024了,可能是不认吧。
2. error C2065: 'S_IWUSR' : undeclared identifierd:\Migration\lndcsm-mig\lndcsm\tiff.c
error C2065: 'S_IWGRP' : undeclared identifierd:\Migration\lndcsm-mig\lndcsm\tiff.c
error C2065: 'S_IRUSR' : undeclared identifier d:\Migration\lndcsm-mig\lndcsm\tiff.c
error C2065: 'S_IRGRP' : undeclared identifier d:\Migration\lndcsm-mig\lndcsm\tiff.c
该错误都源自open()函数中,第三个mode_t mode参数未定义。open()函数是LINUX、UNIX下常用的函数,需要包含sys/stat.h sys/types.h fcntl.h 头文件。可能是由于移植到windows 下的头文件不一致引起的吧。“对于open函数来说,第三个参数仅当创建新文件时(即 使用了O_CREAT 时)才使用,用于指定文件的访问权限位(access permission bits)。” 由于该代码并不需要创建新文件,因此可以不使用。
主要就是这两处错误。之后编译就没有问题了,运行也很正确。
---------------------------------------------------------不要被未知的恐惧打败,Just do it.