fluent加载第三方(C++,Fortan等)动态链接库

article/2025/9/22 7:40:55

这里我介绍一种比较简单的方法,首先我们从ANSYS Fluent UDF Manual上随便找一段正确的UDF,下面这段UDF取自ANSYS 18ANSYS Fluent UDF Manual,位于2.3.23.3. Example 1 - Pressure Profile

/ ***********************************************************************

UDF for specifying steady-state parabolic pressure profile boundary

profile for a turbine vane

************************************************************************/

#include "udf.h"

DEFINE_PROFILE(pressure_profile,t,i)

{

   real x[ND_ND]; / * this will hold the position vector */

   real y;

   face_t f;

   begin_f_loop(f,t)

   {

      F_CENTROID(x,f,t);

      y = x[1];

      F_PROFILE(f,t,i) = 1.1e5 - y*y/(.0745*.0745)*0.1e5;

   }

   end_f_loop(f,t)

}

我们将上面的UDF源代码存为prepare.c

fluent加载第三方(C++,Fortan等)动态链接库

我们启动Fluent 

fluent加载第三方(C++,Fortan等)动态链接库

然后我们直接编译我们刚才保存的prepare.c

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

我们打开Visual Studio(我是Visual Studio 2013英文版)

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库

DLL的代码很简单,就是输出Hello Fluent,这里有一点需要注意一下Solution PlatForms一定要根据Fluent的位数来选择,默认是编译为Win32,而我们现在的一般使用的是64位的Fluent,所以我们需要改变为x64才行(见截图)

#include / *包含输入输出流头文件*/

 

using namespace std;

 

/ *一定要这样写,以c语言的形式导出,在Fluent当中才能识别*/

extern "C" __declspec(dllexport) void CppDynamicLinkLibrary()

{

   cout << "Hello Fluent" << endl; / *输出“Hello Fluent”*/

}

 

fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库

然后准备真实需要编译且加载了加载第三方动态链接库的UDF源文件,代码如下:

#include "udf.h"

 

/ *链接我们刚才动态链接库的函数*/

extern void CppDynamicLinkLibrary();

 

/ *******************************************

*我们在每次迭代完成以后,

*用动态链接库中的函数输出一次“Hello Fluent”

********************************************/

DEFINE_ADJUST(my_adjust,d)

{

   CppDynamicLinkLibrary(); / *调用动态链接库中的函数*/

}

将源代码也保存为prepare.c

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

然后前面动态链接库项目文件夹下

fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库
fluent加载第三方(C++,Fortan等)动态链接库

重新打开Fluent 

fluent加载第三方(C++,Fortan等)动态链接库

导入网格,设置好各种求解参数

加载刚才编译的UDF(注意:此处只需要加载(Load),而不需要编译(Build)了!见截图) 

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

fluent加载第三方(C++,Fortan等)动态链接库

求解运行算例

fluent加载第三方(C++,Fortan等)动态链接库

附:

makefile文件的注释说明

###########################################################

##

## Copyright 2003-2011 ANSYS, Inc.

## All Rights Reserved 

##

###########################################################

#

# purpose:

#    This file is the makefile for NT UDF builds.

#

# usage:

#    Change file name 'makefile_nt.udf' to 'makefile'.

#    Place the makefile file in the target dir.

#    Place the helper file 'user_nt.udf' in same directory.

#    Edit user_nt.udf file.

#    Execute an 'nmake'  (no arguments needed).

#

# notes:

#    The user should not need to change this file.

#    The following macros are expected to be in the user_nt.udf file:

#      SOURCES, VERSION, PARALLEL_NODE and USER_OBJECTS.

#    The macro FLUENT_LIB is automatically defined here based on VERSION

#      and PARALLEL_NODE.

#    Only this makefile and the helper file 'user_nt.udf' needs to be

#      the target dir, all other files are automatically generated,

#      and removed in an 'nmake clean'.

#    The source file is expected in ..\..\src directory.

#    Make sure the VC compiler is set up for command line mode, use

#      the file Vcvars32.bat from Visual Studio to assist this.

#    This makefile uses the public domain program 'sed', make sure

#      sed is in your executable path.

#    The '^' char in the SRC literal is a quote for the '\' char,

#      otherwise interpretted as a line continuation char.

#    Use the 'nmake clean' command to restart builds.

###########################################################

 

#包含user_nt.udf文件

!INCLUDE user_nt.udf

 

# These need to be updated for each release.

LIB_RELEASE=1800

RELEASE=18.0.0

 

# If a local path can be found, use it

!IF (("$(FLUENT_INC_LOCAL_RESERVED)" != "") && ("$(FLUENT_INC)" == ""))

FLUENT_INC = $(FLUENT_INC_LOCAL_RESERVED)

!ENDIF

 

# it is assumed $(FLUENT_INC)is already set.

!IF !DEFINED(FLUENT_INC)

!  ERROR You need to define the environmental variable FLUENT_INC.

!ENDIF

 

!IF !DEFINED(FLUENT_ARCH)

 

!IF ("$(PROCESSOR_ARCHITECTURE)" == "ALPHA")

FLUENT_ARCH = ntalpha

!ENDIF

 

!IF ("$(PROCESSOR_ARCHITECTURE)" == "x86")

FLUENT_ARCH = ntx86

!ENDIF

 

!IF ("$(PROCESSOR_ARCHITECTURE)" == "AMD64")

FLUENT_ARCH = win64

!ENDIF

 

!IF ("$(PROCESSOR_ARCHITEW6432)" == "AMD64")

!  MESSAGE You seem to be working on a 64-bit machine, but in a 32-bit build environment.

!  MESSAGE If you really want to build the UDF for the "ntx86" FLUENT_ARCH, then please

!  MESSAGE set the "FLUENT_ARCH" environment variable to "ntx86" before calling this.

!  ERROR   Aborting.

!ENDIF

 

!ENDIF

 

# set FLUENT_LIB based on VERSION macro

 

!IF (("$(VERSION)" == "2d") || ("$(VERSION)" == "3d") || \

     ("$(VERSION)" == "2ddp") || ("$(VERSION)" == "3ddp"))

FLUENT_LIB = fl$(LIB_RELEASE).lib

LIBS = /Libpath:"$(FLUENT_INC)"\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION)

!ENDIF

 

!IF (("$(VERSION)" == "2d_host") || ("$(VERSION)" == "3d_host") || \

     ("$(VERSION)" == "2ddp_host") || ("$(VERSION)" == "3ddp_host"))

COMM = net

FLUENT_LIB =  mport.lib fl$(LIB_RELEASE).lib

LIBS = /Libpath:"$(FLUENT_INC)"\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION) /Libpath:"$(FLUENT_INC)"\fluent$(RELEASE)\multiport\$(FLUENT_ARCH)\$(COMM)\shared

!ENDIF

 

!IF (("$(VERSION)" == "2d_node") || ("$(VERSION)" == "3d_node") || \

     ("$(VERSION)" == "2ddp_node") || ("$(VERSION)" == "3ddp_node"))

!IF (("$(PARALLEL_NODE)" != "none") && ("$(PARALLEL_NODE)" != "net"))

PARALLEL_NODE = mpi

!ENDIF

COMM = mpi

FLUENT_LIB =  mport.lib fl_$(PARALLEL_NODE)$(LIB_RELEASE).lib

LIBS = /Libpath:"$(FLUENT_INC)"\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION) /Libpath:"$(FLUENT_INC)"\fluent$(RELEASE)\multiport\$(FLUENT_ARCH)\$(COMM)\shared

!ENDIF

 

 

###########################################################

 

#定义变量SRC,其中^表示回车符成为字符串的一部分,其实就是表示字符串..\..\src\

SRC = ..\..\src^\

 

#使用vc的编译器

CC = cl

 

#CFLAGS用来指定头文件的路径

# compile flags

#  /c for compile only,  /Za for ansi c and __STDC__ is set

CFLAGS = /c /Za /DUDF_EXPORTING /DUDF_NT /DWIN64

 

#目标文件为libudf.dll动态链接库

TARGET = libudf.dll

UDFDATA = udf_names.c

 

# generate object names from source names

#".cpp=.obj"的意思是做一个替换

#把变量比如$CSOURCES,$SOURCES2,$SRC_OBJECT,$UDFDATA

#所有的[.cpp]的字符串转换为[.obj]字符串

SOURCES2 = $(CSOURCES:..\..\src\=) #这里实际上就是test.c

SRC_OBJECT = $(SOURCES2:.cpp=.obj) #这里实际上如果是cpp文件就是test.obj,否则默认不发生变化

SRC_OBJECT = $(SRC_OBJECT:.c=.obj)#这里如果是c文件就是test.obj

UDF_OBJECT = $(UDFDATA:.c=.obj)  #这里实际上是udf_name.obj

 

OBJECTS = $(UDF_OBJECT) $(SRC_OBJECT) $(USER_OBJECTS) #

 

#此处为包含的头文件

INCLUDES= -I. \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION) \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\main \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\addon-wrapper \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\io \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\species \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\pbns \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\numerics \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\sphysics \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\storage \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\mphase \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\bc \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\models \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\material \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\amg \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\util \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\mesh \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\udf \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\ht \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\dx \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\turbulence \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\parallel \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\etc \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\ue \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\dpm \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\src\dbns \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\cortex\src \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\client\src \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\tgrid\src \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\multiport\src \

          -I"$(FLUENT_INC)"\fluent$(RELEASE)\multiport\mpi_wrapper\src

 

 

GPU_LIB=

!IF ("$(GPU_SUPPORT)" == "on") #如果开启了GPU加速,那么久将GPU的头文件也包含到INCLUDE里面,默认为off

INCLUDES = $(INCLUDES) \

           -I"$(FLUENT_INC)"\fluent$(RELEASE)\multiport\gpu_wrapper\include

GPU_LIB = OpenCL.lib

LIBS = $(LIBS) /Libpath:"$(FLUENT_INC)"\fluent$(RELEASE)\multiport\gpu_wrapper\$(FLUENT_ARCH)\stub

!ENDIF

 

default:   $(TARGET) #假想目标,每次更新$(TARGET)libudf.dll

 

$(UDF_OBJECT): $(UDFDATA) #udf_name.c编译生成目标文件udf_name.obj

   $(CC) $(CFLAGS) $(INCLUDES)  $**  

   #采用cl编译器 替换(编译但不链接 禁用语言扩展 定义预处理器) 包含头文件 编译所有的文件

  

$(SRC_OBJECT): $(CSOURCES) #test.c编译生成目标文件test.obj

   @echo # Generating ud_io1.h

   resolve.exe -udf $(CSOURCES) -head_file ud_io1.h

   $(CC) $(CFLAGS) $(INCLUDES)  $**

   #采用cl编译器 替换(编译但不链接 禁用语言扩展 定义预处理器) 包含头文件 编译所有的文件

  

$(TARGET): makefile user_nt.udf $(UDF_OBJECT) $(SRC_OBJECT)  #生成目标文件libudf.dll

   @echo # Linking $@ because of $?

   link  $(LIBS) /dll   /out:$(TARGET) \    #/dll表示生成dll文件

         $(OBJECTS)  $(FLUENT_LIB) $(GPU_LIB) #需要链接文件

  

$(UDFDATA): makefile $(SRC_OBJECT)

   #自动生成udf_name.c文件

   @echo # Generating $@ because of $?

   @echo > $@

   @echo >> $@

   @echo #include "udf.h" >> $@

   @echo #include "prop.h" >> $@

   @echo #include "dpm.h" >> $@

     

   @sed -n "s/^ *\(DEFINE_[_A-Z]*(.*)\)/extern \1;/p" $(CSOURCES) >> $@

  

   @echo __declspec(dllexport) UDF_Data udf_data[] = { >> $@

  

   @sed -n "s/^ *DEFINE_\([_A-Z]*\)( *\([_a-zA-Z0-9]*\).*)/\{\"\2\", (void (*)(void))\2, UDF_TYPE_\1\},/p" $(CSOURCES) >> $@

  

   @echo }; >> $@

  

   @echo __declspec(dllexport) int n_udf_data = sizeof(udf_data)/sizeof(UDF_Data); >> $@

   @echo #include "version.h" >> $@

   @echo __declspec(dllexport) void UDF_Inquire_Release(int *major, int *minor, int *revision) >> $@

   @echo { >> $@

   @echo   *major = RampantReleaseMajor; >> $@

   @echo   *minor = RampantReleaseMinor; >> $@

   @echo   *revision = RampantReleaseRevision; >> $@

   @echo } >> $@

  

 

#清理输出文件

clean:

   @del  *.dll *.obj *.ilk *.exp *.lib *.pdb *.c

 

tellfluentarch:

   @echo FLUENT_ARCH: $(FLUENT_ARCH)

   @echo PROCESSOR_ARCHITECTURE: $(PROCESSOR_ARCHITECTURE)

   @echo PROCESSOR_ARCHITEW6432: $(PROCESSOR_ARCHITEW6432)

 

 

$(OBJECTS): $(HSOURCES)



http://chatgpt.dhexx.cn/article/wFTpPLZU.shtml

相关文章

Abaqus运行fortan报错:“Error in job Job-1: Problem during compilation - D:\test.for”

一、简介 最近在学习abaqus的子程序&#xff1b;学习视频为简单实例_哔哩哔哩_bilibili 模型建立后&#xff0c;所写的子程序代码如下&#xff1a; SUBROUTINE DLOAD(F,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,1 COORDS,JLTYP,SNAME) CINCLUDE ABA_PARAM.INC CDIMENSION TIME(2),…

linux安装go语言环境

linux安装go语言环境 前言环境版本前期知识准备部署步骤安装wget下载压缩包&#xff0c;解压到指定路径/usr/local配置环境变量创建GOPATH文件夹添加PATH环境变量and设置GOPATH环境变量1.打开配置文件2.更改配置信息3.然后执行下面命令使上述环境变量的设置立即生效&#xff1a…

如何修改linux的 系统语言

首先查看当前系统的语言 1、echo $LANG 查看当前操作系统的语言 中文&#xff1a;zh_CN.UTF-8 英文:&#xff1a;en_US.UTF-8 2、临时更改默认语言&#xff0c;当前立即生效 重启失效 export LANGen_US.UTF-8 3、永久生效,修改配置文件 centos7/rhel7之前版本&#x…

如何查看、修改linux系统语言

如何查看、修改linux系统语言 本机环境&#xff1a;CentOS 7.6本文方法适用于&#xff1a;centos7/rhel7之前版本和centos7/rhel7版本 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 1、查看当前操作系统的语言 echo $LANG 中文&#…

Linux安装日文语言包,以及,TeraTerm显示乱码问题 的 解决

■效果 ■语言包安装 rootsxzap01:~# apt -y install language-pack-ja ■修改配置文件&#xff08;修改之后&#xff0c;需要重新连接&#xff09; 改前&#xff1a;LANGen_US.UTF-8 vi /etc/default/locale 改后&#xff1a;LANGja_JP.UTF-8 ■乱码问题解决 ・修改这里…

Go语言 linux安装

​​​​​1、下载go安装包 载go的linux安装包&#xff0c;比如&#xff1a;go1.15.6.linux-amd64.tar.gz 2、解压 解压至/usr/local下&#xff0c;命令&#xff1a;tar -zxvf go1.15.6.linux-amd64.tar.gz 解压之后&#xff0c;查看版本&#xff1a;/usr/local/go/bin/go …

linux系统设置中文

怎么设置Linux系统中文语言&#xff0c;这是很多小伙伴在开始使用Linux的时候&#xff0c;都会遇到一个问题&#xff0c;就是终端输入命令回显的时候中文显示乱码。出现这个情况一般是由于没有安装中文语言包&#xff0c;或者设置的默认语言有问题导致的。以centos为例&#xf…

Linux 系统语言切换 ---- Linux Ubuntu 系统语言切换为英文

系统&#xff1a;Linux Ubuntu 18.04 中文版 目录 1. 在桌面右键打开命令框&#xff08;Open Terminal&#xff09;&#xff1a; 2. 进入系统默认语言设置文件目录&#xff1a; 3. 打开系统语言配置文件&#xff1a; 4. 打开的系统文件如下&#xff1a; 5. 修改系统文件内容…

设置linux-kali 2022语言为中文(保姆级图文)

目录 友情提示1. 打开终端2. 打开设置3. 修改设置4. 重启生效设置总结 欢迎关注 『网络工程专业』 系列&#xff0c;持续更新中 欢迎关注 『网络工程专业』 系列&#xff0c;持续更新中 在安装完 kali linux2022 时&#xff0c;操作系统默认语言为英文&#xff0c;初学者可以把…

Linux中如何切换中文英文

查看当前使用的是中文(zh_CN.UTF-8)还是英文(LANG"en_US.UTF-8): echo $LANG 进入etc文件&#xff1a; cd /etc 使用vim编辑器进入初始配置的locale.conf文件&#xff1a; vim locale.conf 可以看到我目前的locale.conf文件中只有中文&#xff0c;如图&#xff1a; 目…

嵌入式Linux开发的编程语言选择

欢迎大家关注我的公*号&#xff1a;embedded_bug 这里的嵌入式Linux环境是指非标准Linux发行版环境&#xff0c;比如通过buildroot创建的&#xff0c;相比于标准的Linux发行版比如ubuntu&#xff0c;debian&#xff0c;fedora&#xff0c;系统比较简陋&#xff0c;提供的库很有…

Linux如何修改系统语言

Linux如何修改系统语言 一、Linux如何修改系统语言 对于刚学Linux 的小伙伴&#xff0c;或者英语水平相对低一些的小伙伴&#xff0c;在自己的Linux系统里面如果能直接显示中文&#xff0c;中文提示就是比较爽的一件事了&#xff0c;接触起来也不会觉得头大&#xff0c;不过说…

将kali Linux系统的语言切换为中文

首先我们打开kali linux 虚拟机 。右键开启终端。.输入sudo apt install ttf-wqy- zenhei命令来下载中文语音包&#xff0c;这里我在第一次输入时没有加sudo命令&#xff0c;没有成功执行&#xff0c;原因是我的用户是普通用户&#xff0c;没有管理员权限&#xff0c;不能进行下…

linux 学习笔记(二)下载中文语言包

主页面是英文对我们对英语不太熟悉的人不是很友好&#xff0c;所以我们要下载中文语言包解决这一困难 首先我们需要换源&#xff0c;默认是美国源&#xff0c;下载很慢&#xff0c;甚至会失败。 1.搜索soft 2.选择最下面那一个 3.找到chain&#xff0c;推荐阿里源 在这里换源…

WPS Office 2019 For Linux 设置显示语言

点击右上角图标A&#xff0c;然后在弹出的对话框中选择中文&#xff0c;然后重启WPS即可

修改 Linux 系统默认语言为中文

最近在使用软件的时候&#xff0c;发现在不同的系统中&#xff0c;界面有时候显示中文&#xff0c;有时候显示英文。 后来发现是在软件启动的时候&#xff0c;读取系统的语言&#xff0c;于是需要参照下面的方式修改系统的语言 1、查看当前语言 locale下面 LANGen_US.UTF-8 …

将kali linux 的语言切换为中文

重置root密码 导入kali后&#xff0c;一般没有root密码&#xff0c;需要重置root密码的 使用sudo passwd root 命令重置密码 换源 因为默认源下载东西特别慢&#xff0c;所以我们需要换源 输入vim /etc/apt/sources.list&#xff0c;更改sources.list里面的源。 源的如下&…

如何更改linux的语言为英文

之前安装虚拟机的时候将语言设置为中文&#xff0c;装软件的时候发现有点不太好用&#xff0c;想改回英文界面。 在命令端输入&#xff1a;sudo vi /etc/default/locale可以看到一下界面&#xff1a; 按a可对其进行编辑&#xff0c;将上面的内容改为&#xff1a; 然后按Esc回…

linux系统设置成中文语言

既上篇文章后续 windows下安装ubuntu双系统&#xff08;详细完整版&#xff09;_缔宇diyu的博客-CSDN博客 打开设置&#xff0c;选择语言&#xff0c;点击管理安装语言 安装中文简体 将汉语拖到第一个&#xff0c;成为默认语言&#xff0c;然后点击应用于全局系统 输入密…

linux修改系统语言为中文

修改centos7系统语言 文章目录 修改centos7系统语言1.查看系当前语言包2.查看系统拥有语言包安装简体中文语言包临时修改永久修改方法(一)方法(二) 1.查看系当前语言包 locale2.查看系统拥有语言包 locale -a(zh_CN.UTF-8是简体中文&#xff0c;如果没有zh_CN.UTF-8,就安装语…