前两天换了Fluent 2022 R2和Visual Studio 2022,结果UDF编译时出现一些状况。感谢万能的互联网,简单处理后终于将问题解决了。
1 Visual Studio编译的问题
在Fluent中利用Visual Studio编译UDF,出现下面的错误提示。
udf_names.c
# Linking libudf.dll because of makefile user_nt.udf udf_names.obj temp.obj
Microsoft (R) Incremental Linker Version 14.33.31630.0
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : fatal error LNK1104: ????????????kernel32.lib??
NMAKE : fatal error U1077: ??"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.33.31629binHostX86x64link.EXE"??: ???????0x450??
Stop.
Done.
刚安装的Visual Studio 2022,环境变量也已经配置好了,但是编译的时候出了问题。
-
检查UDF.bat文件,确保路径修改没有问题。
-
从错误源头上找文章,貌似是 kernel32.lib
文件有问题,前面是乱码,也不知到底是什么问题。猜测可能是找不到此文件。在电脑中搜索文件kernel32.lib,这里找到了此文件,看起来似乎不是缺少文件,而是没有找到文件。记住此文件所在的路径。
-
新建环境变量LIB,指定变量值为 C:Program Files (x86)Windows Kits10Lib
(注意,不同的电脑路径可能有所差异),如下图所示。
重新启动Fluent进行编译,天下太平.
话说ANSYS连这点儿乱码都搞不定,似乎对不起CAE大厂的身份啊,都多少年了还解决不了。
2 用编译UDF工具编译
之前一直使用硫酸亚铜大神的UDF编译工具(https://www.cnblogs.com/liusuanyatong/p/11259591.html)编译UDF,不过最近出现了一些问题。
问题是换用Fluent2022版本后,使用gcc编译不了UDF,就是点击下图中的编译按钮不起作用。但是换用2022R1又是能够正常编译的,目前不知问题在哪里。因为没有源代码,所以就无能为力了,只能寄希望于硫酸大神有空瞅瞅了。或者哪天等我有空了,再自己搞一个新的。
利用Visual Studio是有响应的,不过有错误提示。
错误提示如下图所示。
错误内容如下。
C:Program FilesANSYS Incv222fluentfluent22.2.0cortexsrccx.h(18): fatal error C1083: 无法打开包括文件: “string_safe.h”: No such file or directory
C:Program FilesANSYS Incv222fluentfluent22.2.0cortexsrccx.h(18): fatal error C1083: 无法打开包括文件: “string_safe.h”: No such file or directory
LINK : fatal error LNK1181: 无法打开输入文件“udf_names.obj”
C:Program FilesANSYS Incv222fluentfluent22.2.0cortexsrccx.h(18): fatal error C1083: 无法打开包括文件: “string_safe.h”: No such file or directory
C:Program FilesANSYS Incv222fluentfluent22.2.0cortexsrccx.h(18): fatal error C1083: 无法打开包括文件: “string_safe.h”: No such file or directory
LINK : fatal error LNK1181: 无法打开输入文件“udf_names.obj”
提示的意思是在源文件cx.h中包含的头文件string_safe.h
找不到。这个string_safe.h
文件是存在的,可以在Fluent的安装路径下搜索到。
-
打开cx.h文件,如下图所示,找到 #include "string_safe.h"
,换用绝对路径
-
继续编译,又有错误。这次是需要修改 mem.h
文件中的hash2.h
文件路径,将其改成绝对文件路径
如下图所示进行修改。注意Fluent路径下有很多个mem.h,不要改错文件了。
-
再编译。这次要修改 hase2.h
文件中的hash.h
路径。
改完后如下图所示。
-
继续编译。这次要改的是 hash.h
文件中的std.h
路径
改完后如下图所示。
-
继续编译。这次要改的是 slide.h
文件中的hash2.h
路径。
改完后如下图所示。
再次编译,成功完成。至此,天下太平。
不过不能使用Gcc的话还是有缺憾。
总结一下就是:
1.找到并打开cx.h文件,将string_safe.h的路径改为绝对路径。
2.找到并打开hash2.h,将mem.h的路径改为绝对路径。
3.找到并打开hash2,将hash.h的路径改为绝对路径。
4.找到并打开文件hash.h,将文件std.h改为绝对路径
5.找到并打开slide.h文件,将其中的头文件hash2.h改为绝对路径
文件查找比较耗费时间,推荐使用Everything进行文件路径查找。
(完)
本篇文章来源于微信公众号: CFD之道
感谢作者,解决了我的问题