CGNS快速入门到实战(二):VS配置调用CGNS静态链接库


笔者:陈远航
坐标:南京航空航天大学–航空学院–MAV527
时间:2023年1月3日



2. VS配置调用CGNS静态链接库

  第一篇文章重点讲了CGNS库文件的编译过程,但仅仅停留在编译层面就缺乏了实践意义,所以在有了库文件之后怎么把它利用起来就成了至关重要的事情。

  这是“CGNS快速入门到实战”的第二篇文章,主要讨论VS调用CGNS静态链接库的过程。这里使用的VS版本是2015的,同时也测试过2017版本,都可以正常调用,读者如果是其他版本,亦可参考,大同小异。

2.1 创建VS项目

  (2.1是很基础的VS项目创建,大佬请直接跳过)

  首先我们需要打开VS,依次点击文件-新建-项目,会出现如下界面。我们需要选择创建WIN32控制台应用程序,依次下方输入自定义名称,解决方案名称如果不做改变,系统默认和项目名称相同,保存路径也可以调整,如图2.1.1所示。

在这里插入图片描述

图2.1.1

  点击确定,点击下一步,会出现如下界面,选择控制台应用程序,选择空项目,同时把安全开发生命周期检查选项取消勾选,点击完成,如图2.1.2所示。

在这里插入图片描述

图2.1.2

  右键源文件,选择新建,选择创建c++文件,修改文件名称,可以看到是后缀名是.cpp,这是为了与c文件的后缀名.c方便区分,如图2.1.2所示。注意:另一个文件形式是头文件。

在这里插入图片描述

图2.1.3

  点击添加之后会出现如下界面,在源文件下方出现一个新创建的c++文件,在右边空白区域编写代码,如图2.1.4所示。

在这里插入图片描述

图2.1.4

  好了,一个简单的VS项目就已经创建完毕了,接下来的2.2部分是比较重要的,也是第二章节VS配置使用的核心部分。

2.2 链接cgns.lib库文件

  在第一章节CGNS库编译中,我们获得了一个库文件“cgns.lib”,想要正确的调用这个库文件,需要我们在VS中指定好文件的路径。首先把该文件复制到在2.1中项目文件的目录下,在该文件夹下可以看到有四个文件,一个是复制过来的cgns库文件,一个是c++文件,另外两个是VS默认创建的文件,如图2.2.1所示。

在这里插入图片描述

图2.2.1

  回到VS界面,首先将解决方案配置改为release解决方案平台改为x64。这样的配置非常重要,因为要和cgns.lib的配置相同。具体如图2.2.2所示。

在这里插入图片描述

图2.2.2

  接下来,需要把cgns.lib关联到test.cpp编译的环节,具体操作是:右键cgns-test-属性-链接器-常规-附加库目录,然后把cgns.lib所在的文件夹路径添加到里面,如图2.2.3、2.2.4。点击确定,然后应用。

在这里插入图片描述

图2.2.3

在这里插入图片描述

图2.2.4

  仅仅将cgns.lib所在目录添加进去还是不够的,因为VS编译的时候仅仅会在这个文件夹里优先寻找文件,但它不确定具体要用哪一个文件。所以我们需要把cgns.lib的名称也加入到里面,明确的告诉VS我在编译的时候需要用到cgns.lib这个库文件。具体操作如下:右键cgns-test-属性-链接器-输入-附加依赖项,然后输入cgns.lib,如图2.2.5、2.2.6。点击确定,然后应用。

在这里插入图片描述

图2.2.5

在这里插入图片描述

图2.2.6

  我们把cgns.lib所在的文件夹路径以及文件名称加入了VS编译配置中,目前已经可以成功调用cgns.lib库文件了。
  需要注意的是,本文使用的cgns.lib库文件是静态库文件。如果读者想要调用动态库文件,那么还需要配套的.dll文件。静态库文件与动态库文件的区别在这里就不过多赘述了,详情可以去问度娘。

2.3 链接附加文件

  在调用cgns.lib的时候,由于cgns.lib本身还调用了其他文件,所以也要把这些文件也包含进去。需要包含的文件有:cgnslib.h、cgnstypes.h、libhdf5.lib、libszip.lib、libzlib.lib。一共有五个附加文件,前面两个是头文件,后面三个是库文件。需要注意,cgns只是一种格式规范,文件本身的书写是在hdf5数据结构的基础上搭建的,所以需要用到hdf5的三个库文件。至于hdf5是什么,以及它有什么用处,读者可以浏览cgns的官网寻找答案。
  接下来就是重复2.2的操作步骤了,首先把libhdf5.lib、libszip.lib、libzlib.lib这三个库文件拖入到文件夹中。如图2.3.1。

在这里插入图片描述

图2.3.1

  由于这三个库文件和cgns.lib在一个文件夹下,所以附加库目录就不用重新添加了。只需要在附加依赖项中分别加入这三个库文件的名称。具体操作如下:右键cgns-test-属性-链接器-输入-附加依赖项,然后输入libhdf5.lib、libszip.lib、libzlib.lib,如图2.3.2。点击确定,然后应用。

在这里插入图片描述

图2.3.2

  接下来还需要继续把另外两个头文件cgnslib.h、cgnstypes.h给添加好,还是一样的操作,把这两个文件放到文件夹中。如图2.3.3。
在这里插入图片描述

图2.3.3

  链接头文件的方法与链接库文件的方法不太一样,具体操作是:右键cgns-test-属性-C++ -常规-附加包含目录,然后再里面输入头文件所在文件夹路径,如图2.3.4、2.3.5。

在这里插入图片描述

图2.3.4

在这里插入图片描述

图2.3.5

2.4 调试运行

  配置已经全部完成了,接下来可以敲一段代码调试运行了。代码如图2.4.1所示,只截选了一部分,完整的代码可以从cgns官网下载,这个代码也可以在源码里面找到src—Test_UserGuideCode—C_code—write_grid_unst.c(注:笔者使用的C++语言)

在这里插入图片描述

图2.4.1
/*    Program write_grid_unst   */
/*
Creates simple 3-D unstructured grid and writes it to a
CGNS file.

Example compilation for this program is (change paths if needed!):

cc -I ../.. -c write_grid_unst.c
cc -o write_grid_unst_c write_grid_unst.o -L ../../lib -lcgns

(../../lib is the location where the compiled
library libcgns.a is located)
*/

#include <stdio.h>
#include <string.h>
/* cgnslib.h file must be located in directory specified by -I during compile: */
#include "cgnslib.h"

#if CGNS_VERSION < 3100
# define cgsize_t int
#endif

#define maxelemi 20*16*8
#define maxelemj 1216

int main()
{
    double x[21*17*9],y[21*17*9],z[21*17*9];
    cgsize_t isize[3][1],ielem[maxelemi][8],jelem[maxelemj][4];
    cgsize_t nelem_start,nelem_end;
    int ni,nj,nk,iset,i,j,k,index_file,icelldim,iphysdim;
    int index_base,index_zone,index_coord,ielem_no;
    int ifirstnode,nbdyelem,index_section;
    char basename[33],zonename[33];

    printf("\nProgram write_grid_unst\n");
......

  点击调试-开始执行,等待几秒钟,会跳出cmd命令程序。显示文字大译为:成功创建一个cgns文件,并向cgns文件内写入一个非结构化网格。此时在打开文件夹即可看到一个后缀名为cgns格式为文件了。如图2.4.2、2.4.3。

在这里插入图片描述

图2.4.2

在这里插入图片描述

图2.4.3

2.5 小结

  哦耶!!!你已经成功创建了一个cgns文件,但这个文件非常简单,只包含了一个网格系统,我们还可以向文件里面添加:边界条件、区域连接信息、收敛性结果(升阻力、残差等)、描述性文本、物理量单位、离散结果、流场解、网格信息、时间
  到此为止,使用VS调用cgns静态库的过程就已经展示完毕了。但想要熟练的使用CGNS还需要花费更多时间,笔者将要在第三篇文章中展示如何创建更为复杂的CGNS文件案例,期望对CGNS感兴趣的其他学者有所帮助。

  能够成功编译CGNS库文件,杨克龙师兄帮助了我很多,在这里非常感谢龙哥。


参考文献

  1、《A User’s Guide to CGNS》

  2、《SIDS File Mapping Manual》

  3、 肖天航. 低雷诺数非定常流场的数值方法及其在微型飞行器上的应用[D].南京航空航天大学,2009.


❤️希望对您有帮助,您的支持是我创作最大的动力!

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值