本文介绍在Windows电脑的Visual Studio软件中,配置C++ 语言最新版netCDF库的方法。
netCDF(Network Common Data Form)是一种用于存储、访问和共享科学数据的文件格式和库,其提供了一种灵活的方式来组织、描述和存储多维数据,适用于各种科学领域,包括气象学、地球科学、大气科学、海洋学等。而netCDF库则提供了用于读取和写入 netCDF数据的接口和函数——其支持多种编程语言,包括C、C++ 、Fortran、Python等。在我们之前的文章Anaconda配置h5py与netCDF4库中,介绍过在Python环境下配置netCDF库的方法;而在本文中,我们就介绍一下这个netCDF库在C++ 语言环境下的编译、配置方法。
首先,我们进入netCDF库的官方下载网站。如下图所示,首先我们先下载NetCDF-C这个库——找到其中netCDF-4
库(不带有DAP
字样的那个),选择32-bit
还是64-bit
(一般就是64-bit
),然后点击即可下载。
接下来,我们再下载netCDF-C++ 这个库。如下图所示,找到最新版的、后缀名为.zip
的那个文件即可。
上述文件下载后,会分别得到1
个.exe
可执行文件(前述NetCDF-C库),以及1
个.zip
压缩包(前述netCDF-C++ 库);首先,将前述netCDF-C++ 库的压缩包解压缩,如下图所示。
其次,将前述netCDF-C++ 库的可执行文件打开,如下所示。
打开后,即可开始安装;安装过程中,主要注意以下几个界面的设置即可——首先,如下图所示,选择第二项,即为所有用户添加系统变量。
接下来,选择要安装的文件夹路径;如下图所示。这里建议和前面解压缩文件得到的文件夹放在同一个路径下。
随后,即可完成安装。完成后,我们打开前述netCDF-C++ 库的解压缩文件夹,找到其中的cxx4
文件夹,并找到netcdf
文件,如下图所示。
将上述这个netcdf
文件重命名,修改为netcdfcpp.h
,如下图所示。
接下来,进入需要调用netCDF库的C++ 项目,在其名称上右键,并选择“属性”,如下图所示。
随后,在属性页中的“VC++ 目录”一栏中,分别配置“包含目录”和“库目录”。
其中,“包含目录”的配置如下图所示,即分别添加了解压缩文件夹中的cxx4
文件夹,以及可执行文件安装路径中的include
文件夹。
而“库目录”的配置如下图所示,即添加了可执行文件安装路径中的lib
文件夹。
接下来,打开“链接器”→“常规”一栏中的“附加库目录”,如下图所示。
在其中,将可执行文件安装路径中的bin
文件夹放入,如下图所示。
随后,打开“链接器”→“输入”一栏中的“附加依赖项”,如下图所示。
在其中,将可执行文件安装路径中lib
文件夹下的netcdf.lib
文件放入,如下图所示。
接下来,大家可以试着先运行一下项目;如果项目里有关netCDF库的代码可以成功运行(如果大家此时还没有写完用到netCDF库的代码,那么可以用本文末尾给出的简单的测试代码),那么就大功告成了。
但是,如果出现了含有“无法解析的外部符号”字样的错误提示(我这里当时忘记截图了),那么就需要继续看本文。
首先,我们在项目的“头文件”上方右键,选择“添加”→“现有项”,如下图所示。
随后,打开解压缩文件夹中的cxx4
文件夹,将其中所有不是以test_
开头的、且是以.h
结尾的头文件选中(可以在右侧的搜索栏中搜索.h
字样,然后批量选择),添加到项目的头文件中;如下图所示。
添加之后,项目的头文件就是如下图所示的样子;其中,除了第一个文件,其他紫色框内所有文件,都是我们刚刚添加进去的。
接下来,对项目的源文件执行类似的操作——将解压缩文件夹中的cxx4
文件夹内,所有不是以test_
开头的、且是以.cpp
结尾的代码文件放入,得到的结果如下图所示。
接下来,执行大家的代码。如果不报错、可以执行,那么大功告成;如果出现如下图所示的情况,提示This function or variable may be unsafe
类似的报错,那么可以看到,这个报错给出了一个字段——在我这里就是_CRT_SECURE_NO_WARNINGS
这个字段。
首先,复制上面这个字段,随后打开项目的属性,选择“C/C++” 一栏中的“预处理器”,然后将这个字段复制到“预处理器定义”中即可。
接下来,执行大家的代码。如果不报错、可以执行,那么大功告成;如果运行代码后,弹出来一个小的提示窗口,说找不到某个.dll
文件,那么大家到可执行文件安装路径中的bin
文件夹,将这个里面所有.dll
结尾的文件复制,然后粘贴到Visual Studio项目文件夹下即可。
其中,粘贴完毕上述所有dll
文件后,如下图所示。其中,这个Rec_CPP
文件夹就是我这里的项目文件夹。
这个时候,再运行代码,就没问题了。
最后,给出一个测试C++ 调用netCDF库的代码;其中,path
就是大家存放.nc
数据的路径(文件夹之间的分隔符需要用正斜杠/
来表示),需要自行定义一下。
#include <iostream>
#include "netcdfcpp.h"
using namespace netCDF;
int main() {
string path = "path/to/nc_file";
NcFile file(path, NcFile::read);
}
这个代码什么都没干,就是读取了一下.nc
数据;所以只要代码不报错,就说明netCDF库配置成功。
至此,大功告成。