Fluent的UDF编译调试一直以来是个比较麻烦的事,并且想要调用一些第三方动态库时,就必须要用一些编译小软件①才能做到,而Fluent内并没有提供链接的方法。所以最近也是琢磨了如何使用vscode编译调试UDF,并在此将最近配置好的编译调试环境记录下来。
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++,CMake,CMake 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来定位到需要修改的一行,按下图方式修改保存。
修改前
修改后
2. 项目文件
demo中的文件结构如图所示,自己编写的C源文件等放在src文件夹下,而其他引入的库文件放在import文件夹下。
相关文件https://github.com/bronya19c/CMake_Project_Demo_for_UDF
根据计算模型和代码,需实时更改根目录和src文件下的CMakeLists.txt的内容
根目录下CMakeLists.txt
src文件夹下CMakeLists.txt
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)