vscode+msys2+cmake:Fluent UDF编译调试记录

        Fluent的UDF编译调试一直以来是个比较麻烦的事,并且想要调用一些第三方动态库时,就必须要用一些编译小软件才能做到,而Fluent内并没有提供链接的方法。所以最近也是琢磨了如何使用vscode编译调试UDF,并在此将最近配置好的编译调试环境记录下来。

cut-off

1. 环境准备

        本文使用的Fluent版本是2019 R3,还需要安装好[msys2](https://www.msys2.org/)和[vscode](https://code.visualstudio.com/Download)。

        a. 安装好msys2后,需要注意的是在MINGW64环境下安装mingw-w64 GCC编译工具链,顺便还可以安装好cmake工具。有关于msys2各个环境的区别可以查看[msys2文档](https://www.msys2.org/docs/environments/),目前Fluent UDF使用的C运行时库应该还是msvcrt (PS: 个人推断,待补充信息)。

        编译工具安装完成后,需要将其路径添加至系统环境变量中,例如在Path中添加C:\msys64\mingw64\bin (PS: 重启电脑以确保更新),以方便vscode的cmake插件搜索到。

        b. 安装完vscode,需要在扩展商店里安装C/C++CMakeCMake Tools等插件。

        c. 定位到Fluent目录C:\Program Files\ANSYS Inc\v195\fluent\fluent19.5.0\win64文件夹,将win64下所有文件夹先打包备份,然后对各个文件夹里的 fl1950.exe 重新生成导入库。 具体命令如下:    

gendef fl1950.exe
dlltool -D fl1950.exe -d fl1950.def -l libfl1950.a
del fl1950.lib

        注意node结尾的文件里,是fl_mpi1950.exe,命令里需要对应改动。

gendef fl_mpi1950.exe
dlltool -D fl_mpi1950.exe -d fl_mpi1950.def -l libfl_mpi1950.a
del fl_mpi1950.lib

        同样,定位到C:\Program Files\ANSYS Inc\v195\fluent\fluent19.5.0\multiport\win64文件夹下,打包备份。以上述方法重新生成导入库。

        对.\mpi\shared\和.\net\shared\两个文件夹下分别执行命令

gendef mport.dll
dlltool -D mport.dll -d mport.def -l libmport.a
del mport.lib

 

        d.修改C:\Program Files\ANSYS Inc\v195\fluent\fluent19.5.0\cortex\src\cx.h文件,查找strcasecmp来定位到需要修改的一行,按下图方式修改保存。

修改前

修改后

cut-off

2. 项目文件

        demo中的文件结构如图所示,自己编写的C源文件等放在src文件夹下,而其他引入的库文件放在import文件夹下。

        相关文件https://github.com/bronya19c/CMake_Project_Demo_for_UDF

        根据计算模型和代码,需实时更改根目录和src文件下的CMakeLists.txt的内容

根目录下CMakeLists.txt

src文件夹下CMakeLists.txt

cut-off

3. 编译调试

        将文件整理好后,在vscode的cmake插件里选择“配置所有项目”,并确保ud_io1.h或者udf_names.c正常生成。若无错误产生,此时再点击vscode最下方状态栏上的“build”按钮,生成libudf,完成编译。

cmake配置完项目

编译生成的libudf.dll

        关于调试,确保编译生成的是Debug版本的libudf,在Fluent加载好libudf.dll之后,利用vscode的附加到进程调试工具,实现对udf的调试。在根目录创建 .vscode 文件夹,其下创建的launch.json文件如下图。

{
    "version": "0.2.0",
    "configurations": [{
        "name": "(gdb) 附加",
        "type": "cppdbg",
        "request": "attach",
        "program": "${workspaceFolder}/libudf/win64/2ddp_host/libudf.dll",
		//libudf.dll的路径
        "MIMode": "gdb",
        "setupCommands": [
            {
                "description": "为 gdb 启用整齐打印",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            },
            {
                "description": "将反汇编风格设置为 Intel",
                "text": "-gdb-set disassembly-flavor intel",
                "ignoreFailures": true
            }
        ]
    }]
}

        然后vscode里切到test.c文件,按F1键输入“调试”选择调试C/C++文件,之后选择gdb 附加,便可以附加到Fluent的进程中调试了。注意查看Fluent的控制台内容,其中host是我们这次要附加调试的进程,按照PID即可以对应上。

Fluent控制台的进程信息

附加到进程可输入PID搜索

        自此可以断点调试了。

        2023.4.2 初稿

参考链接:

[1] https://www.cnblogs.com/liusuanyatong/p/11259628.html 

    GCC编译UDF和gdb调试UDF - 硫酸亚铜 - 博客园 (cnblogs.com)

[2] https://www.bilibili.com/video/BV1A7411f7jT 

    CMake简明教程以及现代CMake

[3] https://www.cnblogs.com/liusuanyatong/p/11259591.html 

    编译udf小软件(附视频教程) - 硫酸亚铜 - 博客园 (cnblogs.com)

[4] https://zhuanlan.zhihu.com/p/492619039 

    Visual Studio或CLion使用CMake编译、调试Fluent UDF - 知乎 (zhihu.com)

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空