UDF编译配置
UDF 编译疑难问题
接下来如果编译如下的程序
#include "udf.h"
DEFINE_TRANS_FLENGTH(user_Flength, c, t)
{
real Flength = 31.468;
return Flength;
}
DEFINE_TRANS_RETHETA_C(user_Re_thetac, c, t)
_Check_return_ _ACRTIMP double __cdecl cbrt(_In_ double _X);(求立方根函数)
改成
//_Check_return_ _ACRTIMP double __cdecl cbrt(_In_ double _X);(求立方根函数)
即忽略这样一个函数的定义。结果就可以成功的编译UDF了。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\math.h(99): errorC2059:语法错误:“;”
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\math.h(101): error C2061:语法错误:标识符“__ATTRIBUTES”
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\math.h(101): error C2059:语法错误:“;”
说明这条头文件是必须的。所以这种方法又失败了。
所以还是回到微软自己提供的math.h文件。解决以上出现的编译问题其实解决的思路很简单将
64位 ANSYS FLUENT 编译UDF方法
ANSYS FLUENT 12.x 13.x版下使用Visual Studio 2010编译UDF的设置方法COMSOL出了点问题,只能重装系统搞定。
神马软件都要重装啊,今天装好ANSYS后,打开FLUENT界面时,灵感闪现,想出下面的方法设置UDF编译环境。
其实ANSYS版的FLUENT用UDF是不需要到系统环境变量里面设置path,include,lib的,如果您用的是Visual Studio 2010及后续版本,只需要按一定的规则设置udf.bat文件就行了。
从udf.bat文件结构看,VS版本在VS2010以前的都可以不用设置,即可使用。
实现方法,以Win7 X64位ANSYS X64位为例:1.找到fluent安装目录下的udf.bat(C:\Program Files\ANSYS Inc\v121\fluent\ntbin\win64\udf.bat)用文本编辑器修改udf.bat:添加echo trying to find MS C compiler, version 10.0....set MSVC_DEFAULT=%ProgramFiles(x86)%\Microsoft Visual Studio 10.0if exist "%MSVC_DEFAULT%\vC\vcvarsall.bat" set MSVC=%MSVC_DEFAULT%if not "%MSVC%" == "" goto msvc_env100set MSVC_DEFAULT=%ProgramFiles%\Microsoft Visual Studio 10.0if exist "%MSVC_DEFAULT%\vC\vcvarsall.bat" set MSVC=%MSVC_DEFAULT%if not "%MSVC%" == "" goto msvc_env100:msvc_env100set MSVC_VERSION=100call "%MSVC%\VC\vcvarsall.bat" amd64goto ms_c_end注:如果Visual Studio安装到其他盘,(可能)需要修改路径,比如装到D盘Program Files下,便这样添加:set MSVC_DEFAULT=d:\Program Files\Microsoft Visual Studio 10.0if exist "%MSVC_DEFAULT%\vC\vcvarsall.bat" set MSVC=%MSVC_DEFAULT%if not "%MSVC%" == "" goto msvc_env100:msvc_env100set MSVC_VERSION=100call "%MSVC%\VC\vcvarsall.bat" amd64goto ms_c_end2. 保存该文件即可实现编译环境设置3. 打开FLUENT,确认勾选UDF compiler下的setup compilation environment for UDF:4. 编译成功附:环境变量设置方法:include中添加:64位系统:%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\include;%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\Include;32位系统:%ProgramFiles%\Microsoft Visual Studio 10.0\VC\include;%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\Include;path 中添加:64位系统:%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\lib;%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\lib32位系统:%ProgramFiles%\Microsoft Visual Studio 10.0\VC\lib;%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\liblib中添加:64位系统:%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\bin;%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\bin\amd64;%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE;%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\Tools;32位系统:%ProgramFiles%\Microsoft Visual Studio 10.0\VC\bin;%ProgramFiles%\Microsoft Visual Studio10.0\VC\bin\amd64;%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE;%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\Tools;天乐树2011.10.20。
python udf编译
python udf编译Python UDF编译:优化大数据处理的利器随着大数据时代的到来,数据量的急剧增长对数据处理的速度和效率提出了更高的要求。
在大数据处理中,用户定义函数(User-Defined Function,简称UDF)是一种非常常见的操作,它可以根据用户自定义的逻辑对数据进行处理和转换。
而Python UDF作为一种强大的工具,能够帮助开发人员更加高效地进行大数据处理。
本文将从编译角度探讨Python UDF的优势和应用方法。
一、Python UDF的基本概念Python UDF是指使用Python语言编写的用户自定义函数,它可以在大数据处理框架中被调用和执行。
Python UDF可以借助编译技术,在执行前将其转换为底层的机器码,从而提高运行效率。
相比于解释执行的方式,编译后的Python UDF能够更快地处理数据,并且具备更好的扩展性和灵活性。
二、Python UDF的优势1. 高效性:编译后的Python UDF可以直接在底层执行,避免了解释执行的性能损失,大大提高了数据处理的速度和效率。
2. 灵活性:Python作为一种动态语言,具备很高的灵活性和表达能力。
通过编写Python UDF,开发人员可以根据具体需求自定义数据处理的逻辑,从而实现更加灵活的数据转换和计算。
3. 易用性:Python语言简洁易懂,具备广泛的应用场景。
相比于其他编程语言,使用Python编写UDF更加简单直观,降低了开发门槛,提高了开发效率。
三、Python UDF的应用方法1. 数据清洗:在数据处理过程中,经常需要对原始数据进行清洗和过滤。
通过编写Python UDF,可以根据具体需求对数据进行清洗,如去除重复值、处理缺失值等。
2. 特征提取:在机器学习和数据挖掘领域,特征提取是一个非常重要的环节。
通过编写Python UDF,可以针对具体的特征提取需求,自定义特征提取函数,从原始数据中提取出有效的特征信息。
udf配置及错误解决
FLUENT UDF中关于动网格的DEFINE宏均要求为编译型。
FLUENT的UDF运行环境有两种:解释型与编译型。
虽然两种方式都是采用编译,但是编译方式及编译后获得的结果是不同的。
编译型UDF需要通过Complied进行编译,编译后得到相应的dll文件。
而解释型UDF则是通过Interprete进行加载,不会生成dll文件。
据我的直觉,编译型UDF可能利用了钩子函数的技术。
一、编译型UDF与解释型UDF的差异(翻译自UDF手册)1、解释型UDF一个精简的平台都能被作为编译型UDF使用不需要C编译器(利用FLUENT自身的编译器)比编译型UDF反应慢在方法方面受到较多的限制无法被链接到编译系统或其它库只能使用预定义宏访问存储于ansys fluent中的数据2、编译型UDF比解释型UDF反应迅速没有诸多C语法限制能够使用其它语言编写的函数当具有一些解释型UDF不能处理的功能时,无法作为解释型UDF使用3、选取原则对于小型的、简单的功能,使用解释型UDF复杂功能使用编译型UDF。
(如具有较大的CPU开销、需要访问公共库)二、配置UDF编译环境对于编译型UDF,在fluent中加载时,需要调用C编译器将其编译成DLL文件。
这里的C 编译器虽说理论上是没有任何限制的,但是在windows环境下还是推荐使用microsoft visual c++,在linux环境下推荐使用GCC。
我们这里只说windows环境下编译环境的配置问题。
visual c++最高版本是6.0,再往后就是microsoft visual studio7.0、8.0、9.0、10.0。
其中7.0对应microsoft visual studio2003,8.0对应2005,9.0对应2008,10.0对应2010。
在一些老版的fluent中,通常需要配置环境变量。
配置环境变量的方法,网络上很多,可以搜索。
这里讲的是通过修改udf.bat文件来配置编译环境。
fluent组分输运分压力的udf
fluent组分输运分压力的udfFLUENT是一种流体力学计算软件,其提供了一些内置的函数和工具来模拟流体输运过程。
然而,有时候我们需要进一步扩展FLUENT的功能,来解决一些特殊的问题。
在这种情况下,我们可以使用用户自定义函数(User Defined Function,简称UDF)来实现。
UDF是一种用于FLUENT软件的自定义代码,它可以被集成到FLUENT求解器中,并通过FLUENT的编译和链接工具编译成动态链接库。
以此方式,UDF可以被FLUENT加载和调用,从而扩展软件的功能。
在该问题中,我们需要编写一个UDF来模拟流体输运过程中的分压力情况。
下面是该UDF的基本结构和实现步骤:1.引入所需的FLUENT头文件和标准C库文件:```#include "udf.h"#include "math.h"2.实现UDF主函数`DEFINE_SOURCE`:```DEFINE_SOURCE(pressure_source, cell, thread, dS, eqn) {real pressure;real x[ND_ND];real k = 1.0; //分压力系数C_CENTROID(x, cell, thread);//根据坐标计算分压力pressure = k * (x[0] + x[1] + x[2]);//将分压力加载到方程的源项中eqn->source[dS] = pressure;return 0;```3.编译UDF:使用FLUENT提供的编译和链接工具,将UDF编译成动态链接库。
可以按照FLUENT的官方文档或在线教程中的指导进行操作。
4.在FLUENT中加载UDF:在FLUENT中,选择"Define" -> "User-Defined" -> "Functions",在UDF Manager中加载编译好的UDF动态链接库文件。
udf编译
udf编译UDF编译什么是UDF?UDF(User Defined Function)即用户自定义函数,是一种用户可以自行编写并添加到数据库中的函数。
它可以扩展数据库的功能,使得用户可以使用自己定义的函数来完成一些特定的操作。
UDF编译过程在MySQL中,UDF是通过动态链接库(DLL)实现的。
因此,要使用UDF,必须先将其编译成动态链接库。
1. 编写UDF源代码首先需要编写一个C/C++源文件来实现自己想要实现的功能。
这个源文件需要包含以下内容:- 头文件:包含必要的头文件,如mysql.h、stdio.h等。
- 函数声明:声明需要实现的函数。
- 函数定义:实现需要实现的函数。
例如,下面是一个简单的UDF源代码示例:```#include <stdio.h>#include <mysql.h>my_bool hello_init(UDF_INIT *initid, UDF_ARGS *args, char *message);void hello_deinit(UDF_INIT *initid);char* hello(UDF_INIT *initid, UDF_ARGS *args, char* result, unsigned long* length, char* is_null, char* error);my_bool hello_init(UDF_INIT *initid, UDF_ARGS *args, char *message){return 0;}void hello_deinit(UDF_INIT *initid){return;}char* hello(UDF_INIT *initid, UDF_ARGS *args, char* result, unsigned long* length, char* is_null, char* error){sprintf(result, "Hello, %s!", args->args[0]);*length = strlen(result);return result;}```这个UDF实现的功能是将输入的字符串加上“Hello, ”前缀输出。
ansys12.0 udf 编译环境设置
FLUENT UDF中关于动网格的DEFINE宏均要求为编译型。
FLUENT的UDF 运行环境有两种:解释型与编译型。
虽然两种方式都是采用编译,但是编译方式及编译后获得的结果是不同的。
编译型UDF需要通过Complied进行编译,编译后得到相应的dll文件。
而解释型UDF则是通过Interprete进行加载,不会生成dll文件。
据我的直觉,编译型UDF可能利用了钩子函数的技术。
一、编译型UDF与解释型UDF的差异(翻译自UDF手册)1、解释型UDF∙一个精简的平台∙都能被作为编译型UDF使用∙不需要C编译器(利用FLUENT自身的编译器)∙比编译型UDF反应慢∙在方法方面受到较多的限制∙无法被链接到编译系统或其它库∙只能使用预定义宏访问存储于ansys fluent中的数据2、编译型UDF∙比解释型UDF反应迅速∙没有诸多C语法限制∙能够使用其它语言编写的函数∙当具有一些解释型UDF不能处理的功能时,无法作为解释型UDF使用3、选取原则∙对于小型的、简单的功能,使用解释型UDF∙复杂功能使用编译型UDF。
(如具有较大的CPU开销、需要访问公共库)二、配置UDF编译环境对于编译型UDF,在fluent中加载时,需要调用C编译器将其编译成DLL 文件。
这里的C编译器虽说理论上是没有任何限制的,但是在windows环境下还是推荐使用microsoft visual c++,在linux环境下推荐使用GCC。
我们这里只说windows环境下编译环境的配置问题。
visual c++最高版本是6.0,再往后就是microsoft visual studio7.0、8.0、9.0、10.0。
其中7.0对应microsoft visual studio2003,8.0对应2005,9.0对应2008,10.0对应2010。
在一些老版的fluent中,通常需要配置环境变量。
配置环境变量的方法,网络上很多,可以搜索。
Fluent用户自定义函数(UDF)VC++环境变量配置详细步骤
Fluent用户自定义函数(UDF)VC++环境变量配置详细步骤(一)操作环境:
操作系统版本:WIN7旗舰版Service Pack 1
系统类型:64位操作系统
Fluent版本:6.3.26
VC++版本:6.0
(二)操作步骤:
(1)正确安装Fluent6.3.26和VC++6.0。
(2)鼠标右键单击“计算机”,选择“属性”选项,打开“系统”窗口,点击窗口左侧“高级系统设置”,打开“系统属性”设置面板。
(3)在“系统属性”设置面板中,点击“环境变量”按钮,打开“环境变量”设置面板。
打开“新建用户变量”对话框,开始创建环境变量。
(5)在本案例中要设置三个用户变量,分别是include、lib和path变量。
首先在“变量名”中输入“include”作为变量名,然后打开VC++6.0的安装目录,单击地址栏,使之进入可编辑状态,将路径复制到“变量值”中,单击“确定”,include变量就设置好了。
按照同样的方法设置lib变量和path变量,设置好的变量如下图所示:
未进行环境变量配置前,Fluent控制台可能显示的信息如下:
环境变量配置成功后Fluent控制台显示信息如下:。
Fluent 64bit操作系统编译udf
Fluent12.0在64位操作系统中编译UDF简单操作
操作系统为windows 7 64bit,fluent计算采用编译型udf,直接打开fluent可能会遇到“系统找不到指定的路径”“’nmake’不是内部或外部命令,也不是可运行的程序或批处理文件”等问题。
这里介绍一个简单地操作。
首先在开始菜单中找到编译器,此处为visual studio 2010 ,打开visual studio tools,可以看到visual studio X64 win64 命令提示(2010),将其发送到桌面快捷方式。
然后在开始菜单中找到Fluent,将其发送到桌面快捷方式。
然后运行visual studio X64 win64 命令提示(2010),将fluent的图标拖动到visual studio X64 win64 命令提示(2010)窗口中,回车打开fluent运行,此时发现udf可以build了。
fluent udf 编译教程
在使用Fluent软件进行模拟计算时,经常会遇到需要自定义用户子程序(User Defined Function,简称UDF)的情况。
UDF是Fluent中用户自己编写的函数,用于描述流场中的边界条件、源项等物理过程。
为了正确地使用UDF并进行模拟计算,我们需要了解如何编写和编译UDF。
本教程将向大家介绍如何使用ANSYS Fluent进行UDF的编译,并提供一些常见问题的解决方法。
一、准备工作在进行UDF编译之前,我们需要进行一些准备工作。
1. 确保已安装ANSYS Fluent软件,并且能够正常运行;2. 确保已安装C/C++编译器,常见的编译器有Microsoft Visual Studio、GCC等;3. 编写好UDF的源代码文件,可以使用任何文本编辑器编写,但建议使用支持C/C++语法高亮的编辑器,以便于排查语法错误。
二、设置Fluent编译环境在进行UDF编译之前,我们需要设置Fluent的编译环境,以确保编译器可以正确地识别Fluent的API。
1. 打开命令行终端(Windows系统为cmd,Linux/Unix系统为Terminal);2. 运行以下命令设置Fluent的编译环境:对于Windows系统:```bashcd C:\Program Files\ANSYS Inc\v200\fluentfluent 3d -i```对于Linux/Unix系统:```bashcd /usr/ansys_inc/v200/fluent./fluent 3d -t xxx -g -i```其中,xxx是你的图形界面类型,可以根据你实际的图形界面类型进行替换,一般为Gl 或 X11。
运行上述命令后,Fluent将会启动,并且设置了编译环境。
在Fluent 的命令行界面中,我们可以进行UDF的编译和加载。
三、编译UDF在设置了Fluent的编译环境后,我们可以开始编译UDF了。
1. 将编写好的UDF源代码文件(后缀名通常为.c或.cpp)放置在Fluent的工作目录中;2. 在Fluent的命令行界面中,输入以下命令进行编译:```bash/define/user-definedpiled-functions load my_udf-name/define/user-definedpiled-functionspile my_udf-name/define/user-definedpiled-functions write my_udf-name/exit```其中,my_udf-name是你的UDF源代码文件的文件名(不包括后缀名),例如my_udf。
Fluent UDF 中文教程UDF第7章 编译与链接
第七章UDF的编译与链接编写好UDF件(详见第三章)后,接下来则准备编译(或链接)它。
在7.2或7.3节中指导将用户编写好的UDF如何解释、编译成为共享目标库的UDF。
_ 第 7.1 节: 介绍_ 第 7.2 节: 解释 UDF_ 第 7.3 节: 编译 UDF7.1 介绍解释的UDF和编译的UDF其源码产生途径及编译过程产生的结果代码是不同的。
编译后的UDF由C语言系统的编译器编译成本地目标码。
这一过程须在FLUENT运行前完成。
在FLUENT运行时会执行存放于共享库里的目标码,这一过程称为“动态装载”。
另一方面,解释的UDF被编译成与体系结构无关的中间代码或伪码。
这一代码调用时是在内部模拟器或解释器上运行。
与体系结构无关的代码牺牲了程序性能,但其UDF可易于共享在不同的结构体系之间,即操作系统和FLUENT版本中。
如果执行速度是所关心的,UDF文件可以不用修改直接在编译模式里运行。
为了区别这种不同,在FLUENT中解释UDF和编译UDF的控制面板其形式是不同的。
解释UDF的控制面板里有个“Compile按钮”,当点击“Compile按钮”时会实时编译源码。
编译UDF的控制面板里有个“Open 按钮”,当点击“Open按钮”时会“打开”或连接目标代码库运行FLUENT(此时在运行FLUENT之前需要编译好目标码)。
当FLUENT程序运行中链接一个已编译好的UDF库时,和该共享库相关的东西都被存放到case文件中。
因此,只要读取case文件,这个库会自动地链接到FLUENT处理过程。
同样地,一个已经经过解释的UDF文件在运行时刻被编译,用户自定义的C函数的名称与内容将会被存放到用户的case文件中。
只要读取这个case文件,这些函数会被自动编译。
注:已编译的UDF所用到的目标代码库必须适用于当前所使用的计算机体系结构、操作系统以及FLUENT软件的可执行版本。
一旦用户的FLUENT升级、操作系统改变了或者运行在不同的类型的计算机,必须重新编译这些库。
用 cmake 管理 fluent udf 的编译
用 cmake 管理 fluent udf 的编译CMake 是一款跨平台的自动化构建系统,它能够根据不同的操作系统和编译器来生成相应的构建文件,使得开发者可以更加方便地管理项目的编译过程。
在fluent 中,用户定义函数(User Defined Functions,简称 UDF)是一种重要的扩展功能,通过编写 UDF,用户可以自定义一些计算逻辑,并将其应用到 fluent 模拟中。
本文将介绍如何使用 CMake 来管理 fluent UDF 的编译。
一、准备工作首先,确保你已经安装了 CMake,并了解基本的 CMake 构建过程。
另外,你需要安装 fluent 开发所需的开发库和工具,例如 GCC 或 Clang 编译器。
二、创建 UDF 源代码文件创建一个 C 或 C++ 源代码文件,用于编写你的 UDF 代码。
一般来说,一个UDF 源代码文件应该包含一个主函数,该函数实现了你的 UDF 逻辑。
三、编写 CMake 构建文件创建一个 CMakeLists.txt 文件,用于管理 UDF 的编译过程。
CMakeLists.txt 文件通常包含了一些指令,用于指定源代码文件、依赖项、链接库等信息。
以下是一个简单的 CMakeLists.txt 文件示例,用于编译一个名为 my_udf 的 UDF:```cmakecmake_minimum_required(VERSION 3.0)project(my_udf)# 添加源代码文件add_executable(my_udf main.c udf.c)# 链接 fluent 的动态库target_link_libraries(my_udf fluent)```在上面的示例中,我们将源代码文件 main.c 和 udf.c 添加到了可执行目标my_udf 中,并链接了 fluent 的动态库。
四、构建 UDF 可执行文件在命令行中,进入到 UDF 项目的根目录,并执行 CMake 来生成构建文件。
在64位操作系统中编译UDF
Fluent:在64位操作系统中编译UDF2011年09月04日星期日 19:01编译环境microsoft visual studio2010,fluent版本13.0,操作系统为windows 7 64bit。
测试代码采用UDF手册P394中关于边界条件的实例。
1、解释型经测试,无需任何配置,甚至不需安装vs2010,也能顺利编译成功。
2、编译型(1)按照32位系统中相同的编译方式。
出现如图2所示的错误提示,这通常是编译器未正确配置的原因。
图2 错误提示提示找不到 nmake文件,我们需要将其路径放入环境变量的path中,以便于系统搜索。
32位系统中解决办法:搜索nmake文件,将其所在路径添加至环境变量的path 中。
如图3所示,找到了两个nmake文件,我们将其路径全都加入到path中。
图3 两个nmake,其实我们只需要将第一个添加即可,但是为防万一,我们将两个路径全都加入到环境变量中然而在64位系统中问题依旧,如图4所示。
编译时找寻不到nmake文件。
原因在于我们采用的是64位系统。
因此还需另寻它法。
图4 依旧的问题,可能是操作系统导致的,因为我们在cmd中可以找到nmake(2)解决方案打开开始菜单中的visual studio 2010,我们可以看到如图5所示的菜单。
找到如图所示的x64 win64命令提示,点击运行它。
图5 visual studio2010的菜单我们需要找到fluent的真正路径,即fluent.exe所在的路径。
可以找到fluent 的快捷方式,点击右键选择属性,可以看到图6所示的对话框。
图6 记下框中fluent.exe的路径,后面的参数不需要好了,下面进入正题。
我们从命令行中启动fluent,记住命令行是从图5中红框中启动的。
如图7所示。
注意引号一定不能去掉,否则会提示找不到路径。
图7 启动fluent剩下的工作就没什么好说的了,与32位系统完全一致。
编译后出现提示如图8所示。
udf编译
udf编译
UDF编译:提高Excel函数的效率
UDF(User Defined Function)是指用户自定义的函数,可以在Excel中使用。
相比于Excel自带的函数,UDF可以更加灵活地满足用户的需求。
但是,由于UDF是由用户自己编写的,所以其效率可能不如Excel自带的函数。
本文将介绍如何通过UDF编译来提高Excel函数的效率。
UDF编译的原理是将UDF代码编译成二进制代码,这样Excel在调用UDF时就不需要再解释代码,直接执行二进制代码,从而提高函数的执行效率。
下面是UDF编译的具体步骤:
1. 打开Visual Basic Editor(VBE),在“插入”菜单中选择“模块”,新建一个模块。
2. 在模块中编写UDF代码。
3. 在VBE中选择“调试”菜单,选择“编译VBA项目”,如果代码没有错误,则会提示“编译完成”。
4. 在Excel中使用编译后的UDF函数。
需要注意的是,UDF编译后的函数不能再进行修改,如果需要修改函数,需要重新编译。
UDF编译可以提高函数的执行效率,但是也有一些限制。
首先,UDF编译只适用于Excel 2007及以上版本,早期版本的Excel不支持UDF编译。
其次,UDF编译只适用于纯VBA代码,如果UDF中使用了Excel对象模型,则无法编译。
最后,UDF编译只适用于单线程计算,如果需要在多线程环境下使用UDF,需要使用COM组件或.NET程序集。
UDF编译是提高Excel函数效率的一种有效方法,可以在一定程度上提高函数的执行速度。
但是需要注意UDF编译的限制,选择合适的编译方式,才能发挥UDF编译的最大效果。
3-udf的解释和编译
3-udf的解释和编译udf的解释和编译包含udf的源代码文件可以在ANSYS FLUENT中进行解释或编译,在这两种情况下,都会编译函数,但是对于这两种方法,编译源代码的方式和编译过程产生的代码是不同的。
编译udf编译后的udf的构建方式与ANSYS FLUENT可执行文件本身的构建方式相同:使用Makefile脚本调用system C编译器来构建目标代码库。
在“已编译UDFs”对话框中单击“build”来启动此操作。
目标代码库包含高级C源代码的本机机器语言翻译。
共享库必须在运行时通过一个称为“动态加载”的过程加载到ANSYS FLUENT中。
在已编译的UDFs对话框中,通过单击Load启动此操作。
对象库特定于所使用的计算机体系结构,以及正在运行的ANSYS FLUENT可执行程序的特定版本。
因此,当ANSYS FLUENT升级、计算机的操作系统级别发生变化或作业在不同类型的计算机上运行时,必须重新构建这些库。
总之,编译后的udf是使用图形用户界面从源文件编译而来的,这需要两个步骤。
该过程涉及到已编译UDFs对话框,在该对话框中,首先从源文件构建一个共享库对象文件,然后加载刚构建到ANSYS FLUENT中的共享库。
解释udf解释过的udf使用图形用户界面从源文件解释,但在单个步骤过程中。
该过程在运行时发生,涉及到使用解释的UDFs对话框,在该对话框中解释源文件。
在ANSYS FLUENT中,使用C预处理器将源代码编译成与体系结构无关的中间机器码。
然后,当调用UDF时,此机器码在内部仿真器或解释器上执行。
这一额外的代码层会带来性能损失,但是可以在不同的体系结构、操作系统和ANSYS FLUENT版本之间轻松地共享经过解释的UDF。
如果执行速度确实成为一个问题,则解释的UDF始终可以在编译模式下运行,而无需修改。
用于解释udf 的解释器不具备标准C编译器(用于编译udf)的所有功能。
具体来说,解释udf不能包含以下任何C编程语言元素:· goto statements·Non-ANSI-C prototypes for syntax· Directdata structure references·Declarations of local structures· Unions· Pointersto functions· Arrays of functions· Multi-dimensionalarrays.解释的udf和编译的udf之间的差异解释的udf和编译的udf之间的主要区别是,解释的udf不能使用直接的结构引用访问ANSYS FLUENT求解器数据; 他们只能通过ANSYS提供的宏间接访问数据。
fluent udf 编译与解释
主题:Fluent UDF编译与解释近年来,计算流体力学(CFD)领域得到了迅速的发展,并成为了工程学、地球科学、医学等领域中一个重要的研究工具。
在进行CFD仿真时,用户自定义函数(User Defined Function,UDF)作为一种重要的边界条件和源项模型,可以有效地增强FLUENT软件的功能。
但是,与普通的FLUENT软件中的命令不同,UDF需要用户自行编写程序,然后通过编译器将其转换成FLUENT软件可识别的格式。
对于大部分工程师和研究人员来说,编写、编译和解释UDF仍然是一个具有一定挑战性的任务。
本文将围绕Fluent UDF编译与解释展开,从编译器的选择、编译过程的原理、编译中可能遇到的问题以及UDF的解释与调试等方面,为读者详细介绍与分析Fluent UDF编译与解释相关的知识和技巧。
一、编译器的选择在进行Fluent UDF编译之前,用户需要选择适合的编译器。
FLUENT 软件支持多种编译器,包括Microsoft Visual Studio、gcc、Intel Compiler等。
用户可以根据自己的喜好和系统环境选择合适的编译器。
二、编译过程的原理Fluent UDF的编译过程是将用户编写的程序源文件经过编译器进行编译,生成动态信息库(.dll文件)或共享对象文件(.so文件),然后再将生成的库文件加载到FLUENT软件中。
编译器将源文件翻译成机器语言,使得FLUENT软件可以识别并运行用户自定义的函数。
三、编译中可能遇到的问题在编写UDF并进行编译的过程中,用户可能会遇到一些常见的问题,如编译器报错、信息错误、库文件加载失败等。
这些问题通常是由于用户编写的程序存在语法错误、逻辑错误或者编译器的设置问题所致。
在遇到这些问题时,用户需要逐一排查并修正,保证程序能够正确地编译通过。
四、 UDF的解释与调试编译通过的UDF需要在FLUENT软件中进行解释与调试,确保其能够正确地加载和运行。
UDF编译配置
Complied UDFs错误解决方法
by 黑翼天佑
Compiled UDF需要将Case文件和UDF文件放在同一目录下,不要放在带有中文或者特殊字符的路径内(好像容易有错误,未验证)
为了使用编译型UDF,需要安装VC。
本机采用Win7+ Visual Studio 2010进行说明。
D:\soft\Microsoft Visual Studio 10.0可改为相应的VS2010安装路径
常见错误1
在Build过程中出现
"nmake"不是内部命令或外部命令,也不是可运行程序
解决方法:
设置环境变量
Include:D:\soft\Microsoft Visual Studio 10.0\VC\include
Lib:D:\soft\Microsoft Visual Studio 10.0\VC\lib
Path:D:\soft\Microsoft Visual Studio 10.0\Common7\IDE;D:\soft\Microsoft Visual Studio
10.0\VC\bin
重启电脑
常见错误2
在Load过程中出现
fatal error LNK1104: 无法打开文件“kernel32.lib”
复制kernel32.lib(可以去网上下载)到D:\soft\Microsoft Visual Studio 10.0\VC\lib。
GCC编译UDF和gdb调试UDF
GCC编译UDF和gdb调试UDFFluent版本:19.0前⾯我们介绍过使⽤VS来编译和调试UDF,其实我们也可以⽤GCC来编译UDF、gdb调试UDF。
本次介绍的⽅法更具有通⽤性,也适⽤于Linux下Fluent的UDF编译和调试⾸先我们介绍使⽤GCC来编译UDF我习惯使⽤TDM-GCC,下载地址为:下⾯就安装TDM-GCC安装完TDM-GCC在TDM-GCC安装⽬录下查找gendef.exe,我的路径是I:\TDM-GCC-64\x86_64-w64-mingw32\bin然后我们启动⼀个cmd窗⼝转到Fluent的库⽂件⽬录下,我的⽬录分别为:I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2dI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d_hostI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d_nodeI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddpI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp_hostI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp_nodeI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3dI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3d_hostI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3d_nodeI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddpI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddp_hostI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddp_nodeI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\win64\mpi\sharedI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\win64\net\shared我们以I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d为例:将cmd窗⼝转到⽬录下然后⽣成def⽂件然后根据def⽣成GCC能识别的库其余的⽬录根据上⾯的操作重复即可,注意⼀下I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d_nodeI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp_nodeI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3d_nodeI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddp_node命令:"I:\TDM-GCC-64\x86_64-w64-mingw32\bin\gendef.exe" fl_mpi1900.exe⽣成def⽂件命令:dlltool --dllname fl_mpi1900.exe --def fl_mpi1900.def --output-lib fl_mpi1900.a⽣成GCC的库⽽I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\win64\mpi\sharedI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\win64\net\shared命令:"I:\TDM-GCC-64\x86_64-w64-mingw32\bin\gendef.exe" mport.dll⽣成def⽂件命令:dlltool --dllname mport.dll --def mport.def --output-lib mport.a⽣成GCC的库注意:以上步骤只需要第⼀次进⾏操作,以后再编译的时候就⽆需重复上⾯的步骤了,可直接使⽤这些已经⽣成的库然后我们就可以编译UDF了(以⼆维双精度为例),但是UDF的写法必须按照下⾯的写法Fluent相关的头⽂件:I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddpI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\mainI:\ Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\addon-wrapperI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\ioI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\speciesI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\pbnsI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\numericsI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\sphysicsI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\storageI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\mphaseI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\bcI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\modelsI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\materialI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\amgI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\utilI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\meshI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\udfI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\htI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\dxI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\turbulenceI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\parallelI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\etcI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\ueI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\dpmI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\dbnsI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\cortex\srcI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\client\srcI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\tgrid\srcI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\srcI:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\mpi_wrapper\src注意:此处需要注意⼀下:请务必严格按照上⾯的头⽂件顺序!⽰例是⼆维双精度的UDF,所以是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp如果是⼆维双精度并⾏UDF,那么就需要编译两次对于host,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp_host对于node,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp_node如果是⼆维单精度就需要改变为:I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d如果是⼆维单精度并⾏UDF,那么就需要编译两次对于host,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d_host对于node,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d_node如果是三维双精度就需要改变为:I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddp如果是三维双精度并⾏UDF,那么就需要编译两次对于host,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddp_host对于node,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddp_node如果是三维单精度就需要改变为:I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3d如果是三维单精度并⾏UDF,那么就需要编译两次对于host,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3d_host对于node,那么就是I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3d_node在cmd窗⼝转⼊UDF源代码所在⽬录,我的是N:\demo_case然后输⼊下⾯的命令mkdir .\libudf\win64\2ddp &&gcc -shared -o .\libudf\win64\2ddp\libudf.dll demo.c "I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\win64\2ddp\fl1900.a" -I. -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\main" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\addon-wrapper" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\io" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\species" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\pbns" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\numerics" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\sphysics" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\storage" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\mphase" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\bc" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\models" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\material" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\amg" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\util" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\util" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\mesh" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\udf" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\ht" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\dx" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\turbulence" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\parallel" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\etc" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\ue" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\dpm" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\dbns" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\cortex\src" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\client\src" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\tgrid\src" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\multiport\src" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\mpi_wrapper\src"简单解释⼀下上⾯的命令:mkdir .\libudf\win64\2ddp表⽰⾸先创建放置UDF⽣成⽂件的⽬录,否则后⾯直接编译的话,GCC不会⾃动⽣成⽬录从⽽造成编译出错&&表⽰⽬录创建成功才能进⾏后⾯的命令-o .\libudf\win64\2ddp\libudf.dll表⽰⽣成的UDF⽂件并且将其⽣成在前⾯⽣成的⽬录下demo.c "I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp\fl1900.a"其中demo.c表⽰前⾯编写的UDF源代码,⽽后⾯这个是GCC需要连接的Fluent的库,我们这⾥是⼆维双精度,所以是"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp\fl1900.a"如果是⼆维单精度"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2d\fl1900.a"如果是三维双精度"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3ddp\fl1900.a"如果是三维单精度"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\3d\fl1900.a"编译完成我们打开Fluent当然我们也可以⽤C++的⽅式来编译,只需要将UDF按照如下的⽅式来改写即可,上⾯编译的命令gcc改为g++即可接下来我们介绍如何使⽤gdb来调试UDF,原始的gdb是命令⾏来操作⾮常不⽅便这⾥的gdb我们采⽤gdbgui,可以在浏览器中通过图形化界⾯的⽅式来对UDF程序进⾏调试虽然gdbgui有打包好的exe包,但是这个包已经过时,⽆法⽤来调试UDF,所以我们采⽤python安装的⽅式安装最新的gdbgui然后打开cmd窗⼝,转⼊anaconda安装⽬录下的Scripts⽬录(我的是I:\Anaconda2\Scripts),如果不转到该⽬录下可能会安装出现问题然后输⼊pip install gdbgui --upgrade命令安装完成我在⽤python3安装gdbgui的时候,maskupsafe可能会失败,只需要单独下载安装包本地安装即可,下载链接:在cmd当中输⼊gdbgui test命令表⽰安装成功接下来我们介绍如何使⽤gdbgui来调试UDF⾸先我们编写如下的UDF源码:然后我们转⼊算例⽬录,在cmd下输⼊下⾯的命令:mkdir .\libudf\win64\2ddp && gcc -O0 -g -shared -o .\libudf\win64\2ddp\libudf.dll demo.c "I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\win64\2ddp\fl1900.a" -I. -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\win64\2ddp" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\main" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\addon-wrapper" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\io" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\species" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\pbns" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\numerics" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\sphysics" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\storage" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\mphase" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\bc" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\models" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\material" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\amg" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\util" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\util" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\mesh" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\udf" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\ht" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\dx" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\turbulence" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\parallel" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\etc" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\ue" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\src\dpm" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\src\dbns" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\cortex\src" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\client\src" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\tgrid\src" -I"I:\Program Files\ANSYSInc\v190\fluent\fluent19.0.0\multiport\src" -I"I:\Program Files\ANSYS Inc\v190\fluent\fluent19.0.0\multiport\mpi_wrapper\src"注意:稍微解释⼀下上⾯这个命令的参数:-O0表⽰不做任何优化,其实是默认选项,这⾥不写也可以,启⽤这个选项就是为了防⽌后⾯调试的错误。
UDF编译环境设置
UDF 编译环境设置随着用户求解的问题越来越复杂,使用fluent 软件难免使用编译型的UDF,编译型需要用户安装微软visual stadio C++ 开发软件,并做正确的环境变量配置。
否则则会出现如nmake不是内部命令的错误。
关于环境变量的设置,网络上已经有大量的实例,现介绍一种简单的环境变量配置方法:在fluent 的安装目录下找到udf.bat, 修改以下内容:set MSVC_DEFAULT=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0if exist "%MSVC_DEFAULT%\VC\vcvarsall.bat" setMSVC=%MSVC_DEFAULT%if not "%MSVC%" == "" goto msvc_env110这个文件中还有其他类似的语句,但是都是重复查找不同的编译环境。
通过查找vcvarsall.bat,fluent才知道编译器位置。
如果不是就要靠运行msvc_env110,那就要手动设置环境变量了。
注意你安装了VS2015以后,在program(x86)中有Microsoft Visual Studio 14.0,Microsoft Visual Studio 12.0,Microsoft Visual Studio 11.0,其中只有一个是有效的,这个要仔细确认(一般只有一个文件夹是完整的安装,估计这样做是为了向下兼容性)。
修改完了这个路径以后就OK了。
环境变量配置完全以后,还会出现一些别的问题。
如编译UDF时会利用math.h, 注意编译这个文件有可能会出现很多问题。
如下:C:\Program Files (x86)\Microsoft Visual Studio14.0\VC\INCLUDE\math.h(483): error C2059: 语法错误:“常量”C:\ProgramFiles (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\math.h(483): errorC2143: 语法错误: 缺少“)”(在“/”的前面)C:\Program Files (x86)\Microsoft Visual Studio14.0\VC\INCLUDE\math.h(483): error C2143: 语法错误: 缺少“{”(在“/”的前面)C:\Program Files (x86)\Microsoft Visual Studio14.0\VC\INCLUDE\math.h(483): error C2059: 语法错误:“/”C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\math.h(483): error C2059: 语法错误:“)”如果光按fluent提示的查找错误,是不可能完成错误查找的,打开math.h因为你会看见483行是这样_Check_return_ _ACRTIMP double __cdeclcbrt(_In_ double _X);(求立方根函数)这个语句本身是没有什么问题的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Complied UDFs错误解决方法
by 黑翼天佑
Compiled UDF需要将Case文件和UDF文件放在同一目录下,不要放在带有中文或者特殊字符的路径内(好像容易有错误,未验证)
为了使用编译型UDF,需要安装VC。
本机采用Win7+ Visual Studio 2010进行说明。
D:\soft\Microsoft Visual Studio 10.0可改为相应的VS2010安装路径
常见错误1
在Build过程中出现
"nmake"不是内部命令或外部命令,也不是可运行程序
解决方法:
设置环境变量
Include:D:\soft\Microsoft Visual Studio 10.0\VC\include
Lib:D:\soft\Microsoft Visual Studio 10.0\VC\lib
Path:D:\soft\Microsoft Visual Studio 10.0\Common7\IDE;D:\soft\Microsoft Visual Studio
10.0\VC\bin
重启电脑
常见错误2
在Load过程中出现
fatal error LNK1104: 无法打开文件“kernel32.lib”
复制kernel32.lib(可以去网上下载)到D:\soft\Microsoft Visual Studio 10.0\VC\lib。