UDF 编译疑难问题_第1页
UDF 编译疑难问题_第2页
UDF 编译疑难问题_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UDF编译疑难问题作者华南理工大学何奎20165月随着用户求解的问题越来越复杂,使用fluent软件难免使用编译型的UDF,编译型需要用户安装微软visualstadioC++开发软件,并做正确的环境变量配置。否则则会出现如nmake不是内部命令的错误。除了编译环境的正确设置,还有一些细节上的疑难问题一并给出解决方法。目前这些问题都是网上搜索不到的,希望有缘人能在百度文库里找到这篇文献。关于环境变量的设置,网络上已经有大量的实例,现介绍一种简单的环境变量配置方法:在fluent的安装目录下找到udf.bat,修改以下内容:setMSVC_DEFAULT=%ProgramFiles(x86)%\MicrosoftVisualStudio14.0ifexist"%MSVC_DEFAULT%\VC\vcvarsall.bat"setMSVC=%MSVC_DEFAULT%ifnot"%MSVC%"==""gotomsvc_env110这个文件中还有其他类似的语句,但是都是重复查找不同的编译环境。通过查找vcvarsall.bat,fluent才知道编译器位置。如果不是就要靠运行msvc_env110,那就要手动设置环境变量了。注意你安装了VS2015以后,在program(x86)中有MicrosoftVisualStudio14.0,MicrosoftVisualStudio12.0,MicrosoftVisualStudio11.0,其中只有一个是有效的,这个要仔细确认(一般只有一个文件夹是完整的安装,估计这样做是为了向下兼容性)。修改完了这个路径以后就OK了。环境变量配置完全以后,还会出现一些别的问题。如编译UDF时会利用math.h,注意编译这个文件有可能会出现很多问题。如下:C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(483):errorC2059:语法错误:“常量”C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(483):errorC2143:语法错误:缺少“)”(在“/”的前面)C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(483):errorC2143:语法错误:缺少“{”(在“/”的前面)C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(483):errorC2059:语法错误:“/”C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(483):errorC2059:语法错误:“)”如果光按fluent提示的查找错误,是不可能完成错误查找的,打开math.h因为你会看见483行是这样_Check_return__ACRTIMPdouble__cdeclcbrt(_In_double_X);(求立方根函数)这个语句本身是没有什么问题的。如果想修改这条语句完成math.h的编译,那就走入了死胡同。那么换个版本的math.h呢?于是换了个

瑞典公司开发的版本Copyright2003-2010IARSystemsAB(瑞典著名软件开发商).结果编译出现:C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(19):fatalerrorC1083:无法打开包括文件:“ycheck.h”:Nosuchfileordirectory如果你查找ycheck.h,想加入这个头文件来解决这个问题的话,你会发现在中文资料库里根本就查不到这样的头文件。这可能是该公司内部开发的一个头文件。所以这条路又行不通。那么如果将这条预处理程序忽略掉呢?结果就会出现以下的编译错误:C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(99):errorC2061:语法错误:标识符“__ATTRIBUTES”C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(99):errorC2059:语法错误:“;”C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(101):errorC2061:语法错误:标识符“__ATTRIBUTES”C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\INCLUDE\math.h(101):errorC2059:语法错误:“;”说明这条头文件是必须的。所以这种方法又失败了。所以还是回到微软自己提供的math.h文件。解决以上出现的编译问题其实解决的思路很简单将_Check_return__ACRTIMPdouble__cdeclcbrt(_In_double_X);(求立方根函数)改成//_Check_return__ACRTIMPdouble__cdeclcbrt(_In_double_X);(求立方根函数)即忽略这样一个函数的定义。结果就可以成功的编译UDF了。至于为什么意思语句编译会出错就需要更加专业的程序员来解释。接下来如果编译如下的程序#include"udf.h"DEFINE_TRANS_FLENGTH(user_Flength,c,t){realFlength=31.468;returnFlength;}DEFINE_TRANS_RETHETA_C(user_Re_thetac,c,t){realRe_thetac=176.396;returnRe_thetac;}DEFINE_TRANS_RETHETA_T(user_Re_thetat,c,t){realRe_thetat=210;returnRe_thetat;}会出现如下的错误,许多人认为这个程序是直接从fluent帮助文件里拷贝的应该没什么问题,但是阅读资料应该全面,注意到t的声明在程序里没有给出,但是却在帮助文件的前半部分查到。Fluent里面默认thread为一个指针,而t不是所以将t改成thread应该就可以了,结果证实我的推理是正确的。udf_names.c(7):errorC2059:语法错误:“}”udf_names.c(8):warningC4034:sizeof返回0编译结果udf_names.c(8):

warning

C4113:

“void

(*)()”和“void

(*)(void)”的参数列表不同

#

Linking

libudf.dll

becaus

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论