zoukankan      html  css  js  c++  java
  • [c++][netcdf]使用c++编译netcdf

    转发:https://www.cnblogs.com/wang985850293/p/6576533.html

     https://blog.csdn.net/toby54king/article/details/78711563

    **************************************************************************************************
    使用的netcdf的c++接口版本是netcdf-cxx4-4.2.tar.gz,下载地址:http://www.unidata.ucar.edu/downloads/netcdf/netcdf-cxx/index.jsp
    **************************************************************************************************
     
     
    **************************************************************************************************
    netcdf的C++接口是基于netcdf的C语言接口,所以在使用c++接口之前,我们需要安装netcdf的c语言版本。
    使用的netcdf的C语言版本是NetCDF-4.2.1,下载地址:http://www.unidata.ucar.edu/software/netcdf/docs/winbin.html
    这个版本是二进制版本,直接点击安装即可,然后会得到include,lib和bin等几个文件。
    **************************************************************************************************
     
     
     
    使用方法:
    1.首先解压这个压缩文件;
    2.将解压后的文件中的cxx4文件夹中的netcdf文件改为netcdfcpp.h;
    3.我们需要用的是cxx4文件夹中的所有的.h和.cpp文件;
    **************************************************************************************************
    注意:不使用hdf5的话,ncFile.cpp文件需要做改动:去掉红色前面的NC_NETCDF4
    case NcFile::newFile:
          ncCheck(nc_create(filePath.c_str(),  NC_NOCLOBBER, &myId),__FILE__,__LINE__);
          break;
    case NcFile::replace:
          ncCheck(nc_create(filePath.c_str(),  NC_CLOBBER, &myId),__FILE__,__LINE__);
          break;
    **************************************************************************************************
    4.将所有的.h和.cpp文件添加到你的工程目录下即可,分别添加到工程头文件和源文件中,在VS项目属性——VC++目录——包含目录,添加.h头文件所在的位置即可。
    5.将netcdf的c语言的头文件netcdf.h,动态链接库netcdf.dll和库文件netcdf.lib添加到VS2010中。
    如何添加动态链接库:
    a.将netcdf的c语言版本的include,lib和bin文件添加到工程目录下;
    b.VS中项目属性——链接器——常规——附加库目录,这里添加你的bin文件中的netcdf.dll路径;
    c.VS中项目属性——链接器——输入——附加依赖项,这里添加netcdf.lib库文件;
    d.VS中项目属性——VC++目录——包含目录,添加netcdf.h头文件的位置;
    e.VS中项目属性——VC++目录——库目录,添加netcdf.lib库文件的位置。
     
    测试成功与否:注意添加的头文件netcdfcpp.h
    1.首先创建***.nc文件:
    #include <iostream>
    #include "netcdfcpp.h"
    #include <vector>
    using namespace std;
    using namespace netCDF;
    using namespace netCDF::exceptions;
     
    static const int NX = 6;
    static const int NY = 12;
     
    static const int NC_ERR = 2;
     
    int main()
    {
      int dataOut[NX][NY];
     
      for(int i = 0; i < NX; i++)
        for(int j = 0; j < NY; j++)
          dataOut[i][j] = i * NY + j;
     
      try
        {  
          NcFile dataFile("simple_xy.nc", NcFile::replace);
     
          NcDim xDim = dataFile.addDim("x", NX);
          NcDim yDim = dataFile.addDim("y", NY);
     
          vector<NcDim> dims;
          dims.push_back(xDim);
          dims.push_back(yDim);
          NcVar data = dataFile.addVar("data", ncInt, dims);
     
          data.putVar(dataOut);
     
          return 0; 
        }
      catch(NcException& e)
        {e.what();
          return NC_ERR;
        }
    }
     
    2.读取刚创建的***.nc文件:
     
     
    #include
    #include "netcdfcpp.h"
    using namespace std;
    using namespace netCDF;
    using namespace netCDF::exceptions;
     
    static const int NX = 6;
    static const int NY = 12;
     
    static const int NC_ERR = 2;
     
    int main()
    {
       try
       {
       int dataIn[NX][NY]; 
     
       NcFile dataFile("simple_xy.nc", NcFile::read);
     
       NcVar data=dataFile.getVar("data");
       if(data.isNull()) return NC_ERR;
       data.getVar(dataIn);
     
       for (int i = 0; i < NX; i++)
          for (int j = 0; j < NY; j++)
    if (dataIn[i][j] != i * NY + j)
      return NC_ERR;
     
       return 0;
       }catch(NcException& e)
         {
           e.what();
           cout<<"FAILURE*************************************"<<endl;
           return NC_ERR;
         }
    }
     
  • 相关阅读:
    splay区间模板-1331-序列终结者1
    splay单点模板-5203-BZOJ3224 普通平衡树
    线段树模板-1204-影子的宽度
    树状数组模板-1200-序列和
    YAML配置复杂集合类型
    webpack vue-router vue 打包上线一些列问题
    idea 注释模板
    JavaScript中reduce()方法
    ES6实用语法糖
    axios 备忘
  • 原文地址:https://www.cnblogs.com/lyggqm/p/12926974.html
Copyright © 2011-2022 走看看