我有一个简单的Chapel程序来测试NetCDF模块:
use NetCDF;
use NetCDF.C_NetCDF;
var f: int = ncopen("ppt2020_08_20.nc", NC_WRITE);
var status: int = nc_close(f);
当我用编译时
chpl -I/usr/include -L/usr/lib/x86_64-linux-gnu -lnetcdf hello.chpl
它会生成一个关于SysCTypes:的错误列表
$CHPL_HOME/modules/packages/NetCDF.chpl:57: error: 'c_int' undeclared (first use this function)
$CHPL_HOME/modules/packages/NetCDF.chpl:77: error: 'c_char' undeclared (first use this function)
...
有人知道我的错误是什么吗?我尝试将use SysCTypes;
添加到我的程序中,但似乎没有效果。
对延迟的响应和这种糟糕的行为表示抱歉。这是一个潜入NetCDF模块的错误,Chapel的夜间测试似乎没有发现。要解决此问题,请编辑$CHPL_HOME/modules/packages/NetCDF.chpl
,添加行:
public use SysCTypes, SysBasic;
在CCD_ 3模块的声明中(在我的源代码副本中的第50行附近(。如果你考虑将这个bug作为一个问题提交到Chapel GitHub问题跟踪器上,那也太好了,尽管无论如何我们都会在下一个版本中尝试修复它。
有了这个更改,除了nc_close()
采用c_int
参数而不是Chapelint
之外,您的程序几乎可以为我编译。你可以依靠Chapel的类型推断来导致这种情况的发生:
var f = ncopen("ppt2020_08_20.nc", NC_WRITE);
或显式声明f
为c_int
:类型
var f: c_int = ncopen("ppt2020_08_20.nc", NC_WRITE);
最后,我认为您应该能够从chpl
命令行中删除-lnetcdf
,因为使用NetCDF模块应该会自动添加此要求。
感谢您引起我们的注意!