ubuntu 18.04 编译安装flexpart 10.4(2023年) —— 筑梦之路
2023年10月29日
环境说明
操作系统版本:ubuntu 18.04
python版本:3.6.9
gcc版本:7.5.0
编译安装路径:/usr/local
cmake: 3.10.2
所需要的源码包我已经打包放到我的资源。
2021年1月份已经写过一篇Ubuntu 编译安装的帖子FLEXPART安装配置笔记(成功案例)——筑梦之路_筑梦之路的博客-CSDN博客
也遇到比较多的网友来咨询在编译安装过程中的问题,因此今天再次整理一下编译安装的过程,顺便解决之前写的不是很明确的地方,欢迎大家交流指正。
准备编译工作
# 更新软件源
sudo apt-get update# 安装编译工具和依赖包
sudo apt-get install -y g++ gfortran autoconf libtool automake flex bison cmake python3-dev python3-pip git vim curl unzip build-essential libbz2-dev libssl-dev libreadline-dev libsqlite3-dev tk-dev ruby# 安装python相关包sudo apt-get install -y python3 python3-eccodes python3-genshi python3-numpy gfortran fftw3-dev libeccodes-dev libemos-dev# 配置pip显示的格式sudo mkdir ~/.pipsudo cat > ~/.pip/pip.conf << EOF
[list]
format=columns
EOF# 建立软链接sudo ln -sf /usr/bin/python3 /usr/bin/python
sudo ln -sf /usr/bin/pip3 /usr/bin/pip# 检查sudo python -V
sudo pip -V
准备python环境
# 安装pip的包sudo pip3 install cdsapi ecmwf-api-client eccodes==1.6.1 -i https://pypi.douban.com/simple#检查是否安装成功sudo python3 -c "import eccodes; print(eccodes.__version__)"
sudo python3 -c "import genshi; print(genshi.__version__)"
sudo python3 -c "import numpy; print(numpy.__version__)"
sudo pip3 list | grep cdsapi | awk '{print $2}'
sudo python3 -c "import ecmwfapi; print(ecmwfapi.__version__)"
编译安装
1. 编译安装jasper
# 下载源码包wget -c http://www.ece.uvic.ca/~mdadams/jasper/software/jasper-1.900.1.zip# 解压文件到指定目录unzip jasper-1.900.1.zip -d /usr/local/# 新建目录mkdir -p /usr/local/jasper# 切换目录cd /usr/local/jasper-1.900.1# 配置CFLAGS="-fPIC" ./configure --prefix=/usr/local/jasper# 编译
make# 编译检查
make check# 安装
make install
2. 编译安装grib_api
# 下载源码wget -c https://people.freebsd.org/~sunpoet/sunpoet/grib_api-1.28.0-Source.tar.gz# 解压到指定目录tar -zxvf grib_api-1.28.0-Source.tar.gz -C /usr/local/# 创建目录mkdir -p /usr/local/grib_api# 切换目录cd /usr/local/grib_api-1.28.0-Source# 编译三部曲./configure --prefix=/usr/local/grib_api --with-jasper=/usr/local/jaspermakemake checkmake install
3. 编译安装eccodes
# 下载源码wget -c https://confluence.ecmwf.int/download/attachments/45757960/eccodes-2.7.3-Source.tar.gz?api=v2# 解压源码到指定目录tar xvzf eccodes-2.7.3-Source.tar.gz -C /usr/local/# 创建目录mkdir -p /usr/local/eccodes# 切换目录cd /usr/local/eccodes-2.7.3-Source# 编译三部曲mkdir build && cd buildcmake -DCMAKE_INSTALL_PREFIX=/usr/local/eccodes /usr/local/eccodes-2.7.3-Source -DPYTHON_EXECUTABLE=/usr/bin/python3makectestmake install# 配置环境变量cat >> /etc/profile << 'EOF'
export ECCODES_SAMPLES_PATH=$PATH:/usr/local/eccodes/share/eccodes/samples
export ECCODES_DEFINITION_PATH=$PATH:/usr/local/eccodes/share/eccodes/definitions
EOFsource /etc/profile# 检查验证sudo apt-get install libeccodes-dev
python3 -m eccodes selfcheck# 正常输出如下:
Found: ecCodes v2.6.0.
Your system is ready.
4. 编译安装zlib
# 下载源码v=1.2.8 sudo wget http://www.zlib.net/fossils/zlib-${v}.tar.gz# 解压到指定目录sudo tar -xf zlib-${v}.tar.gz -C /usr/local/ && cd /usr/local/zlib-${v}# 编译三部曲sudo ./configure --prefix=/usr/localsudo make && make install
5. 编译安装 szlib
# 下载源码v=2.1
wget http://sources.buildroot.net/szip/szip-${v}.tar.gz# 解压到指定目录tar -xf szip-${v}.tar.gz -C /usr/local/cd /usr/local/szip-${v} && mkdir -p /usr/local/szip# 编译三部曲./configure --prefix=/usr/local/szip
make
make install
6. 编译安装hdf5
# 下载源码v=1.8.13wget https://www.gfd-dennou.org/arch/ucar/netcdf/netcdf-4/hdf5-${v}.tar.gz# 解压到指定目录tar -xf hdf5-${v}.tar.gz -C /usr/local/ && cd /usr/local/hdf5-${v}# 设置变量prefix="/usr/local/hdf5-$v"echo "Add HDF5_DIR=$prefix to .bashrc"echo "" >> ~/.bashrcecho "# HDF5 libraries for python" >> ~/.bashrcecho export HDF5_DIR=$prefix >> ~/.bashrc# 编译三部曲./configure --enable-shared --enable-hl --prefix=$HDF5_DIRmake -j 2 # 2 for number of procs to be usedmake install
7. 编译安装netcdf-c
# 下载源码v=4.1.3wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/netcdf-${v}.tar.gz# 解压到指定目录tar -xf netcdf-${v}.tar.gz -C /usr/local/ && cd /usr/local/netcdf-${v}# 设置变量prefix="/usr/local/"echo "Add NETCDF4_DIR=$prefix to .bashrc"
echo "" >> ~/.bashrc
echo "# NETCDF4 libraries for python" >> ~/.bashrc
echo export NETCDF4_DIR=$prefix >> ~/.bashrc# 编译三部曲CPPFLAGS=-I$HDF5_DIR/include LDFLAGS=-L$HDF5_DIR/lib ./configure --enable-netcdf-4 --enable-shared --enable-dap --prefix=$NETCDF4_DIRmake
make install
8. python Netcdf4 安装
# install python's netCDF4sudo pip3 install cftime==1.3.1 -i https://pypi.douban.com/simplesudo pip3 install numpy==1.19.4 -i https://pypi.douban.com/simplesudo pip3 install netCDF4==1.5.5.1 -i https://pypi.douban.com/simplesudo python3 -c "import netCDF4;print(netCDF4.__version__)"
9. 编译安装FLEXPART10.4
# 下载源码wget -c https://www.flexpart.eu/downloads/66# 解压到指定目录tar -xvf 66 -C /usr/local/ # 切换目录cd /usr/local/flexpart_v10.4_3d7eebf# 备份src目录cp -r src src-backup-`date +%F`# 修改makefile文件vim makefile#### 修改第一处#modified to 64-73行ROOT_DIR = /usr/localF90 = /usr/bin/gfortranMPIF90 = /usr/bin/mpifortINCPATH1 = ${ROOT_DIR}/grib_api/includeINCPATH2 = ${ROOT_DIR}/jasper/includeINCPATH3 = /includeLIBPATH1 = ${ROOT_DIR}/grib_api/libLIBPATH2 = ${ROOT_DIR}/jasper/libLIBPATH3 = /lib#### 修改第二处### Enable netCDF output?
ifeq ($(ncf), yes)NCOPT = -DUSE_NCF -lnetcdff -lnetcdf
elseNCOPT = -UUSE_NCF
endif#### 修改第三处## LIBRARIES
LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper $(NCOPT) -lnetcdffFFLAGS = -I$(INCPATH1) -I$(INCPATH2) -I$(INCPATH3) -O$(O_LEV) -g -cpp -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV) $(NCOPT) $(FUSER) #-Warray-bounds -fcheck=all # -march=nativeDBGFLAGS = -I$(INCPATH1) -I$(INCPATH2) -I$(INCPATH3) -O$(O_LEV_DBG) -g3 -ggdb3 -cpp -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV_DBG) $(NCOPT) -fbacktrace -Wall -fdump-core $(FUSER) # -ffpe-trap=invalid,overflow,denormal,underflow,zero -Warray-bounds -fcheck=allLDFLAGS = $(FFLAGS) -L$(LIBPATH1) -Wl,-rpath,$(LIBPATH1) $(LIBS) -L$(LIBPATH2) -L$(LIBPATH3)
LDDEBUG = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) -L$(LIBPATH2) -L$(LIBPATH3)# 编译make ncf=yes# 配置环境变量
cat >> /etc/profile <<'EOF'
export LD_LIBRARY_PATH=/usr/local/grib_api/lib:$LD_LIBRARY_PATH
EOFsource /etc/profile
10. 准备安装flex_extract
# 拉取源码cd /usr/localgit clone --single-branch --branch master https://www.flexpart.eu/gitmob/flex_extract
1)编译安装zlib 1.2.9
# 下载zlib 1.2.9源码,编译安装zlib 1.2.9版本wget https://sourceforge.net/projects/libpng/files/zlib/1.2.9/zlib-1.2.9.tar.gz# 解压到指定目录tar -zxvf zlib-1.2.9.tar.gz -C /usr/localcd /usr/local/zlib-1.2.9# 编译三部曲./configure; make; make install# 创建软链接ln -s -f /usr/local/lib/libz.so.1.2.9 /lib/x86_64-linux-gnu/libz.so.1
2) 编译安装emoslib
# 下载源码wget https://confluence.ecmwf.int/download/attachments/3473472/libemos-4.5.9-Source.tar.gz# 创建目录mkdir /usr/local/emoslib# 解压到指定目录tar -xzf libemos-4.5.9-Source.tar.gz -C /usr/local/# 切换目录cd /usr/local/libemos-4.5.9-Source# 编译安装mkdir build ; cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/emoslib /usr/local/libemos-4.5.9-Source
make
make install
3)安装ECMWF 与ERA5安装权限
cat > ~/.ecmwfapirc <<EOF
{"url" : "https://api.ecmwf.int/v1","key" : "8fb37b516ba233bde068613a8f08c785","email" : "791653827@qq.com"
}
EOFcat > ~/.cdsapirc <<EOF
url: {api-url}
key: {uid}:{api-key}
EOF
4) 修改makefile_local_gfortran文件
# 切换目录cd /usr/local/flex_extract/Source/Fortran/# 修改文件vim makefile_local_gfortran# change the original path of ECCODES_INCLUDE_DIR to
ECCODES_INCLUDE_DIR=/usr/include
5) 执行安装flex_extract
# 切换目录cd /usr/local/flex_extract# 执行安装./setup_local.sh#成功结果输出如下内容WARNING: installdir has not been specified
flex_extract will be installed in here by compiling the Fortran source in /usr/local/flex_extract/Source/Fortran
Install flex_extract_v7.1.2 software at local in directory /usr/local/flex_extractUsing makefile: makefile_local_gfortran
gfortran -O3 -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -lemosR64 -I. -I/usr/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./rwgrib2.f90
gfortran -O3 -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -lemosR64 -I. -I/usr/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./phgrreal.f90
gfortran -O3 -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -lemosR64 -I. -I/usr/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./grphreal.f90
gfortran -O3 -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -lemosR64 -I. -I/usr/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./ftrafo.f90
gfortran -O3 -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -lemosR64 -I. -I/usr/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./calc_etadot.f90
gfortran -O3 -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -lemosR64 -I. -I/usr/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./posnam.f90
gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -lemosR64 -fopenmp
ln -sf calc_etadot_fast.out calc_etadotlrwxrwxrwx 1 root root 20 Oct 29 06:30 ./calc_etadot -> calc_etadot_fast.out
6)测试flex_extract
# 测试flex_extractcd Testing/Installation/Calc_etadot
# execute the Fortran progam without arguments
../../../Source/Fortran/calc_etadot#成功结果展示:
STATISTICS: 98842.4598 98709.7359 5120.5385
STOP SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS
至此,已经全部编译安装完成,并测试成功。
这里附上python包的版本信息,以供各位参考:
# pip list
Package Version
---------------------- -------------------
asn1crypto 0.24.0
attrs 17.4.0
Automat 0.6.0
blinker 1.4
cdsapi 0.6.1
certifi 2018.1.18
cffi 1.15.1
cftime 1.3.1
chardet 3.0.4
click 6.7
cloud-init 23.1.2
colorama 0.3.7
command-not-found 0.3
configobj 5.0.6
constantly 15.1.0
cryptography 2.1.4
distro-info 0.18ubuntu0.18.04.1
eccodes 1.6.1
ecmwf-api-client 1.6.3
findlibs 0.0.5
Genshi 0.7
httplib2 0.9.2
hyperlink 17.3.1
idna 2.6
importlib-resources 5.4.0
incremental 16.10.1
Jinja2 2.10
jsonpatch 1.16
jsonpointer 1.10
jsonschema 2.6.0
keyring 10.6.0
keyrings.alt 3.0
language-selector 0.1
MarkupSafe 1.0
netCDF4 1.5.5.1
netifaces 0.10.4
numpy 1.19.5
oauthlib 2.0.6
PAM 0.4.2
pexpect 4.2.1
pip 9.0.1
pyasn1 0.4.2
pyasn1-modules 0.2.1
pycparser 2.21
pycrypto 2.6.1
pygobject 3.26.1
PyJWT 1.5.3
pyOpenSSL 17.5.0
pyserial 3.4
python-apt 1.6.5+ubuntu0.7
python-debian 0.1.32
pyxdg 0.25
PyYAML 3.12
requests 2.18.4
requests-unixsocket 0.1.5
SecretStorage 2.3.1
service-identity 16.0.0
setuptools 39.0.1
six 1.11.0
sos 4.3
ssh-import-id 5.7
systemd-python 234
tqdm 4.64.1
Twisted 17.9.0
ubuntu-advantage-tools 27.2
ufw 0.36
unattended-upgrades 0.1
urllib3 1.22
wheel 0.30.0
zipp 3.6.0
zope.interface 4.3.2
如果不关心flexpart的版本,可以直接使用apt-get命令安装
apt-get update && apt-get install flexpart
相关源码包在我的资源或者通过文中链接地址下载。
注意事项:文中源码包的地址会随着时间过期,若不能下载请自行搜索相关版本文件。
相关文章:

ubuntu 18.04 编译安装flexpart 10.4(2023年) —— 筑梦之路
2023年10月29日 环境说明 操作系统版本:ubuntu 18.04 python版本:3.6.9 gcc版本:7.5.0 编译安装路径:/usr/local cmake: 3.10.2 所需要的源码包我已经打包放到我的资源。 2021年1月份已经写过一篇Ubuntu 编译安装的帖子F…...

深度学习(生成式模型)——DDIM:Denoising Diffusion Implicit Models
文章目录 前言为什么DDPM的反向过程与前向过程步数绑定DDIM如何减少DDPM反向过程步数DDIM的优化目标DDIM的训练与测试 前言 上一篇博文介绍了DDIM的前身DDPM。DDPM的反向过程与前向过程步数一一对应,例如前向过程有1000步,那么反向过程也需要有1000步&a…...
HashMap的遍历方式 -- 好几次差点记不起来总结了一下
public class HashMapDemo {public static void main(String[] args) {// 创建一个HashMap并添加一些键值对Map<String, Integer> hashMap new HashMap<>();hashMap.put("Alice", 25);hashMap.put("Bob", 30);hashMap.put("Charlie"…...
PostgreSQL 两表关联更新sql
PostgreSQL两表关联更新SQL如下: UPDATE user SET username ft.name, age ft.age FROM userinfo WHERE user.id ft.id; user 要更新的表 userinfo数据来源表...

R2R 的一些小tip
批次间控制器(Run-to-run Controller),以应对高混合生产的挑战。将最优配方参数与各种工业特征相关联的模型是根据历史数据离线训练的。预测的最优配方参数在线用于调整工艺条件。 批次控制(R2R control)是一种先进的工艺控制技术,可在运行(如批次或晶圆…...

UML中类之间的六种主要关系
UML中类之间的六种主要关系: 继承(泛化)(Inheritance、Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组…...
机器学习-朴素贝叶斯之多项式模型
多项式模型: 记住一定用于离散的对象,不能是连续的 于高斯分布相反,多项式模型主要适用于离散特征的概率计算,切sklearn的多项式模型不接受输入负值 因为多项式不接受负值的输入,所以样本数据的特征为数值型数据&…...
下载的nginx证书转换成tomcat证书格式
1、下载的nginx证书格式 XXX.crt private.key 2、转换成JKS格式证书步骤 #crt格式证书转pem openssl x509 -in xxx.crt -out xxx.pem#先转成p12格式,此时注意,如果有别名,需要设置 openssl pkcs12 -export -in xxx.crt -inkey private.key…...

计算机毕业设计选题推荐-社区志愿者服务微信小程序/安卓APP-项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
ES6中数值扩展
目录 二进制和八进制表示法 Number.isFinite() Number.isNaN() Number.parseInt()和Number.parseFloat() Number.isInteger() Math.trunc() Math.sign() Math.cbrt(): Math.clz32(): Math.imul(): Math.fround(): ES6中…...

sql-50练习题11-15
sql-50练习题11-15 前言数据库表结构介绍学生表课程表成绩表教师表 1-1 查询没有学全所有课程的同学的信息1-2 查询至少有一门课与学号为01的同学所学相同的同学的信息1-3 查询和1号的同学学习的课程完全相同的其他同学的信息1-4 查询没学过张三老师讲授的任一门课程的学生姓名…...

【多线程面试题十九】、 公平锁与非公平锁是怎么实现的?
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官: 公平锁与非公平锁是怎么…...

LabVIEW背景颜色设为和其他程序或图像中一样
LabVIEW背景颜色设为和其他程序或图像中一样 有时候LabVIEW背景色要和其他程序或者图片的颜色保持一致,如果要求不高可以大致设置一下。如果要求较高,那可以按照如下的方式。 先用PS打开标准图像,之后用吸管工具选择图像上中的点࿰…...

图表参考线,数据对比一目了然_三叠云
参考线 路径 仪表盘 >> 仪表盘设计 功能简介 新增「参考线」功能。 参考线是在单个图表组件中添加的一条水平虚线,也可以配置两条线形成的参考区间,它表示该水平线上纵坐标值的大小。 使用场景: 通过辅助线的设置,可…...

【深度学习】Transformer、GPT、BERT、Seq2Seq什么区别?
请看vcr:https://transformers.run/back/transformer/...
数据结构与算法之LRU: 实现 LRU 缓存算法功能 (Javascript版)
关于LRU缓存 LRU - Lease Recently Used 最近使用 如果内存优先,只缓存最近使用的,删除 ‘沉睡’ 数据 核心 api: get set 分析 使用哈希表来实现, O(1)必须是有序的,常用放在前面,沉睡放在后面, 即:有序࿰…...

Matlab | 基于二次谱提取地震数据的地震子波
本文通过地震数据二次谱求取地震子波谱,具体方法如下: MATLAB代码实现如下: function w SndSpecExtWavelet(x, M) % 功能:基于二次谱提取输入地震数据data的地震子波wavelet % Extracting Wavelet from Input Seismic Dat…...

利用远程IO模块,轻松驾驭食品包装生产的自动化
常见的自动化包装系统,它的核心部分通常由一系列高端设备组成,包括自动开箱机、自动封箱机、自动捆扎机、装箱机器人、码垛机器人等。这些设备协同工作,形成一条高效运转的生产线,从开箱到装箱,再到码垛,每…...
华为OD机考算法题:计算最大乘积
题目部分 题目计算最大乘积难度易题目说明给定一个元素类型为小写字符串的数组,请计算两个没有相同字符的元素长度乘积的最大值。 如果没有符合条件的两个元素,返回 0。输入描述输入为一个半角逗号分隔的小写字符串的数组,2< 数组长度<…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...