爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 172833|回复: 331

WRF3.3在thinkpad-E420+ubuntu11.04-64位系统下用gcc4.4+gfortran4.4编译全过程

  [复制链接]

新浪微博达人勋

发表于 2011-10-27 21:03:57 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 随缘 于 2015-4-30 08:32 编辑

筒子们反应浏览帖子有些图看不到,所以做成pdf了,方便下载
在此,学习下CUIST的大神们,设置了文档密码:nuist,来铭记南气

thinkpad-E420 ubuntu11.04 gcc4.4 gfortran4.4编译WRF3.3全过程by nuist-俊杰.pdf (1021.52 KB, 下载次数: 1193)

点评

这样一个帖子从构思到成文再到发布是都是非常不容易的,楼主的精神非常值得发扬,期待楼主的剩余部分啦  发表于 2011-11-2 15:06

评分

参与人数 7威望 +2 金钱 +85 贡献 +16 收起 理由
gaochao123 + 5 很给力!
qxtlyf + 10 + 2
孤蓝et + 20 + 2 很给力!啊俊杰。刚才发现这么赞的文章,评个.
godenflame135 + 10 + 2 我们论坛需要这样的总结,图文并茂,“链”.
artmunich + 2 + 20 + 5 牛人!!
黎大页子 + 10 支持原创!
mofangbao + 10 + 5 这是顶楼的分,后面的期待继续啊

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-27 21:04:46 | 显示全部楼层

第二部分:gcc+gfortran编译器设置

本帖最后由 随缘 于 2011-10-29 18:54 编辑

第二部分:gcc+gfortran编译器设置

                               
登录/注册后可看大图

如图:
首先输入命令:#gcc --version
               #gfortran --version
来检查gccgfortran的版本或是否安装
对于为什么用4.4版本,是因为我用最新版编译的时候gcc4.5.2出现了bug,wrf没有编译成功,而换4.4编译完成,gcc4.5.2的bug好像是通过#upgrade gcc可以来补的,我没再深究。
正常情况下,ubuntu11的bin执行文件是放在/usr/bin文件里面的,系统默认安装是gcc4.5.2版本和不安装gfortran。ubuntu11自带的新立得软件是个很不错的软件安装系统,打开新立得,点搜索,在里面输入gfortran-4.4,它会自动在源里搜到关于gfortran-4.4的安装包,选择好安装包,双击就会标记,然后点应用,新立得就会自动处理依赖关系下载安装了,(装g++也一样的程序)。安装gcc4.4也是一样的,有趣的是,Java程序的安装依赖于gcc4.4,Java也是我们后面要用到的,所以直接搜Java,找到Java。。common什么的安装包,标记,应用后,系统会提示需要安装哪些依赖系统,在里面就可以看到有gcc4.4的安装包在里面。
      当然,如果你想把编译器更新到最新版,可以使用命令:
#apt-get installgcc gfortan g++ m4 csh (这里csh也要更新,否则后面编译wrf./configure ./compile会有提示不可用)
或者是#apt-get install build-essential
     以上做完后,我们打开/usr/bin文件,会看到有4.54.4两个版本的编译器,现在/usr/bin/gcc/usr/bin/gfortrang++的链接是指向系统默认4.5最新版本的。我们需要做个新的链接指向4.4版本,先把原各链接后改名加back,然后执行建立链接命令:
#ln -s/usr/bin/gcc-4.4 /usr/bin/gcc
Gfortrang++都一样做这样的链接,完成后再查看版本:
#gcc --versiongfortrang++一样)
就可以看到编译器都是4.4版本的了

我想对于装PGI的同学,以后大可照此办理,PGI通常要和gcc版本相匹配,可以改装个与PGI相匹配的GCC版本来编译安装PGI,献给那些为了装某个PGI版本而当前系统gcc过高或过低而不断换Linux系统版本的同学,呵呵,也包括偶

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
mofangbao + 10 + 5

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-27 21:05:58 | 显示全部楼层

第三部分:zlib、 libpng、 jasper、 NETCDF4.1.3、NCL安装

第三部分:zlib libpng jasper NETCDF4.1.3NCL安装
首先安装zlib libpng jasper这三个库文件,不建议使用apt-get自动安装,那样太乱了感觉,安装生成的lib文件哪都有,太分散了。
三个库的安装顺序是zlib---libpng----jasper
一般都是安装在/usr/local下面,如安装zlib是这样:
解压缩的这些就不多说了,直接右键解压缩,可以不用命令,与windows下面是一样的
#./configure   --prefix=/usr/local/zlib
#make
#make install
只要前面编译器设置正确,这里应该不会有什么问题的,很顺利的通过了。Libpngjasperzlib安装是一样的,不重复了。
都安装完后,要在/root/bashrc里设置jasperlibinclude路径,以备wrf调用
打开bashrc,加入以下几行:
#for JASPER
JASPER=/usr/local/jasper;exportJASPER
JASPERLIB=/usr/local/jasper/lib;exportJASPERLIB
JASPERINC=/usr/local/jasper/include;exportJASPERIN
然后
#cd
#source   .bashrc就可以了。
现在开始netcdf4.1.3的安装
ztftom”大侠在其[原创]搞定Ubuntu:单机WRF安装 的帖子中说:
“进入解压缩后得到的文件夹,
./configure --disable-dap --disable-netcdf-4--prefix=/home/ztftom/util/netcdf
注意:上面红色高亮的两个选项是很多次实验后证明必须的。--disable-dap的原因是缺少一个‘curl’lib --disable-netcdf-4是因为WRF暂时不支持netcdf 4
在我的这个编译环境下,ubuntu11.04是自带安装了libcurl3的,所以我们只需设置一个不支持hdf5的参数就可以了。期待WRFV3.3.2版本,在11月份即将出的WRFV3.3.2版本加入了支持netcdf-4的设置。
在此,再次膜拜ztftom”大侠!呵呵

Cdnetcdf路径下,使用命令:
#./configure  --disable-netcdf-4  --prefix=/usr/local/netcdf
还是安装在/usr/local下面,方便不同用户都可以调用
#make
#make install
这里应该也是很顺的,不会有什么错误
截一个成功后的界面看看:

                               
登录/注册后可看大图
同样也是要在bashrc文件里设置环境变量
打开bashrc,加入下面几行:
#for netcdf
export   NETCDF=/usr/local/netcdf
export   PATH=.:$NETCDF/bin:$PATH
export   LD_LIBRARY_PATH=${NETCDF}/lib:${LD_LIBRARY_PATH}
export   LD_RUN_PATH=${NETCDF}/lib:${LD_RUN_PATH
WRF需要,再加入一行开启支持WRF输出大文件的选项设置:
export   WRFIO_NCD_LARGE_FILE_SUPPORT=1
然后#cd
#source   .bashrc
我们可以验证下netcdf安装成功与否,在终端中输入:
#ncdump
可以看到如下界面:

                               
登录/注册后可看大图
到此,netcdf4.1.3安装完成。
在这里,同样不建议用命令$sudo apt-get install netcdf-bin让系统自动下载安装NETCDF!
接下来,我们开始安装NCL6.0
下载NCL6.0的地址是:
http://www.earthsystemgrid.org/dataset/ncl.6.0.0.0.bin.nodap.html
要在www.earthsystemgrid.org注册下,然后登入后才可下载
我们这里下载已经在Linux_Debian_下编译好的包,如图中选择:

                               
登录/注册后可看大图
将其解压缩后,将原文件名改为ncl_ncarg-6,然后复制到/usr/local/下,
打开bashrc文件加入ncarg的环境变量设置,加入如下几行:
#for ncarg
export NCARG_ROOT=/usr/local/ncl_ncarg-6
export PATH=$NCARG_ROOT/bin:$PATH
export MANPATH=$NCARG_ROOT/man:$MANPATH
export DISPLAY=:0.0
然后#cd
#source   .bashrc
验证NCL安装成功与否:
#ncargversion
出现如下界面:

                               
登录/注册后可看大图
OK,成功了!



评分

参与人数 2威望 +2 金钱 +15 贡献 +5 收起 理由
Sunnystone24 + 5 很给力! 顶起,我在照着一步一步编译。。。
mofangbao + 2 + 10 + 5

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-27 21:07:51 | 显示全部楼层
第四部分:WRF3.3+WPS3.3的安装
Wrf3.3模式的下载地址是:
也是要注册下才可下载
Wrf3.3有一个bug的补丁configure_fix.tar也要下载,地址是:
http://www.mmm.ucar.edu/wrf/users/wrfv3.3/known-prob-3.3.html
/home自己的用户下面建立一个model的文件夹来存放wrf
如我的是:/home/jie/model
wrf3.3解压缩在这个文件夹下,同时解压缩下载下来的configure_fix.tarbug补丁,用补丁里的文件覆盖WRFV3里的相关文件
然后就可以进行编译了。
ubuntu里,比较诡异的是,即使用root超级用户登录使用wrf的编译命令还是提示没有权限,无法执行。所以,先给configurecompile执行文件加权限,在终端输入:
#cd   /home/jie/model/WRFV3进入wrf主程序文件夹
#chmod   u+x configure   加权限
# chmod   u+x compile
现在就可以敲入命令开始编译了
#./configure
会出现如下界面:

                               
登录/注册后可看大图
关于选项问题,在这里,对于一般单机来讲,我们就选serial(单核)吧,其他选项的意思是:
serial meanssingle processor 单核
smpar means Symmetric Multi-Processing/Shared Memory Parallel (OpenMP)
多核
dmpar means Distributed Memory Parallel (MPI)
分布式计算
dm+sm means Distributed Memory with Shared Memory
多核+分布式计算
所以,我们键入:15  then  enter
然后会探测CFORTRAN编译器和测试NETCDF
在测试NETCDF这会报个错,提示:no  entry nc.o什么的
这个,我在网上查的原因有大侠说是老版的netcdf有这个,新版的有些netcdf里没有这个的,对模式没有什么影响的
在这里,我们修改WRFV3下的configure执行文件,打开configure,定位到第595行,如图:

                               
登录/注册后可看大图

将此行中的nc.o删去,然后保存,返回终端重新执行#./configure命令,此时,会出现如下图界面:

                               
登录/注册后可看大图
configure完成!
开始执行编译命令:
#./compile em_real>& wrfcompile.log
这里,一般做天气预报选test里面的em_real,做研究的话可选对应的其他的,好了,现在就静静的等待计算机完成。
我们在WRFV3的文件夹里会看到有个wrfcompile.log的记录文件生成,而且计算机在不断向里面写记录,这里一般不会出现什么错误,会顺利完成的。等到全部编译完成,这个log文件的大小正常情况下应该是506KB左右。编译完成,光标返回后,打开wrfcompile.log文件,点搜索,输入:错误,查看是否有错。如果在状态栏看到“错误未找到”提示,那么,恭喜你,WRF主程序编译OK了!



下面介绍WPS3.3的安装
#cd   /home/jie/model/WPS进入WPS程序文件夹
与wrf一样要先给configure和compile执行文件加权限,在终端输入:
#chmod   u+x configure   加权限
# chmod   u+x compile
#./configure
会出现如下界面:

                               
登录/注册后可看大图

选择6,enter
在WPS文件夹下会生成configure.wps文件
在这里,我们需修改下此文件内的相关库的本机化路径
首先,我们在/usr/local下建立wpslib和wpsinclude两个文件夹来存放相关文件
将/usr/local下安装的zlib、libpng、jasper文件夹下的各lib文件夹内的东西复制到wpslib内,这里绕了点,说白了,就是把zlib、libpng、jasper生成的lib库文件统一放入wpslib内便于管理调用和修改设置。关于include头文件和刚才做相同的处理,统一放入wpsinclude文件夹内。
还有一个libX11的库文件路径需要修改,configure.wps的默认搜寻路径在ubuntu11.04是没有的。在ubuntu11.04里,libX11库是放在/usr/lib/x86_64-linux-gnu下的。
configure.wps修改后的设置如下图:

                               
登录/注册后可看大图

修改完成后,就可以进行编译了
#./compile>& wpscompile.log
编译完成后,我们打开wpscompile.log记录文件会查到出现一些错误,如下图所示:

                               
登录/注册后可看大图


                               
登录/注册后可看大图

错误主要是两方面的:
1、是未生成stringutil.mod文件
2、是找不到生成的libw3.a和libg2_4.a两个库文件
对于第一个问题,我们在网上可以下载到现成的stringutil.mod文件来解决,打开如下地址
http://162.105.245.3/%7Eyingyue/software/models/WRFV3.2/wps/util/src/
下载stringutil.mod文件
对于第二个问题,其实libw3.a和libg2_4.a两个库文件在/WPS/ungrib/src/ngl里的g2和w3文件夹里是生成了的,但是好像生成的链接不可用似的,对于这个问题的解决我主要是参考了“Ice & Cream”大侠在网上的一篇博文:
http://hi.baidu.com/longlivehejian/blog/item/702dfaeb2f52fccad439c92b.html
文中讲到“3. wps的编译过程会有几个被忽略的错误,提示找不到libw3.a和libg2_4.a,这是WPS/ungrib/src/ngl中Makefile中的相对路径问题,用gedit打开该Makefile,将两个"$(RANLIB)"后面的路径中的"w3/"和"g2/"去掉。”
他的意思如图所示:

                               
登录/注册后可看大图

下面是一直在纠结的所在地:

                               
登录/注册后可看大图

好了,现在问题的解决方法都有了,在其他文件夹下新建一个back的文件夹,将刚才修改过:configure.wps文件、WPS/ungrib/src/ngl下的Makefile文件、还有其实在/WPS/ungrib/src/ngl里的g2和w3文件夹里是生成了的libw3.a和libg2_4.a两个库文件、还有从网上下载到的stringutil.mod文件都提取到新建的back文件夹里。
然后,将model里的WPS文件夹改名(随便,只要不叫WPS就可以,呵呵),重新将下载的WPS3.3的tar文件解压缩到model文件夹下,
其实就是重复刚开始时的那些步骤
#cd   /home/jie/model/WPS进入WPS程序文件夹
与wrf一样要先给configure和compile执行文件加权限,在终端输入:
#chmod   u+x configure   加权限
# chmod   u+x compile
#./configure

完了后,用back文件夹里备份的文件去替换新的WPS文件夹下相应的文件。
1、back文件夹里备份的stringutil.mod文件放入/WPS/geogrid/src下
2、back文件夹里备份的configure.wps文件覆盖/WPS的对应文件
3、back文件夹里备份的Makefile文件覆盖/WPS/ungrib/src/ngl的对应文件
4、back文件夹里备份的libw3.a库文件放入/WPS/ungrib/src/ngl里的w3文件夹里
5、back文件夹里备份的libg2_4.a库文件放入/WPS/ungrib/src/ngl里的g2文件夹里
6、将back文件夹里备份的libw3.a和libg2_4.a两个库文件在/WPS/ungrib/src/ngl里再存一份,这样做,是我想:如果在这里生成的libw3.a和libg2_4.a两个库文件的链接不可用,还不如直接将这两个文件放入的这里呢
OK了,以上这些做完后,我们就可以再次编译WPS了
#./compile  >&  wpscompile2.log
通过前面处理后,这次编译基本可以顺利进行了,主要的几个exe文件都可生成,但是还是存在一些可忽略的警告,如下图所示:

                               
登录/注册后可看大图

这样,WPS3.3就算是在曲曲折折中编译完成了,至于上面的一些可忽略的警告,其实我以前在redhat9上编译WRFV2.2.1时也遇到过,是可以解决的,网上也有相关的解决办法,等后面有时间吧,再补充下,争取做到编译全程一个警告都不出的效果,呵呵,现在就先到此为止吧!谢谢围观!

最后附上相关的一些库文件和修改后的文件:

configure---WRFV3.3 (24.09 KB, 下载次数: 47)

评分

参与人数 1威望 +5 金钱 +20 贡献 +8 收起 理由
mofangbao + 5 + 20 + 8

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-27 21:08:32 | 显示全部楼层

楼这层呢,我准备对前面的工作做一些修正

本帖最后由 随缘 于 2011-11-1 19:50 编辑

楼这层呢,我准备对前面的工作做一些修正
前面说到wrf主程序安装那部分里,configure完了后,会出现一个no entry nc.o in  archive的错误,系统探测netcdf时出了点错误。
接下来,我修改了configure执行文件,但是事实证明,这样的修改,还是会留下后遗症的,到后面编译arwpost的时候,会提示wrf主程序生成的io_netcdf.a的库文件内容不可用的,WPS里面的那些错误不知道也和这个有没关系,后面再测试下去。
我下来后,又对这个问题研究了下,问题应该还是出在gcc版本和netcdf4.1.3的兼容性上面,要不就是netcdf4.1.3新版的bug

我又用netcdf4.0.1版本走了一遍,结果不再出现no entry nc.o in  archive的错误了,一切都很顺利。

后面再看到这个帖子的同学,希望你们在操作过程中使用netcdf4.0.1的版本,应该就不会有那么多麻烦事了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-27 21:10:26 | 显示全部楼层
本帖最后由 随缘 于 2014-4-21 20:50 编辑

第六部分:arwpost后处理程序及rip画图软件的安装

时间过得可真是快啊!今天有点空闲时间,把前面遗留的问题慢慢补上吧!
楼这层就来说说arwpost和rip的安装吧
arwpost的安装步骤:
./configure
然后有个选项列表,里面有可输出v5d格式和不可两种,我通常选grads和v5d两种格式都可输出
然后:./compile
如果安装顺利:ls *.exe
有ARWpost.exe 生成表明安装成功!
但是经常有人会碰到如下的错误:
module_interp.f:(.text+0xc429): undefined reference to `nf_inq_varid_'
module_interp.f:(.text+0xc5af): undefined reference to `nf_inq_varid_'
module_interp.f:(.text+0xc67d): undefined reference to `nf_inq_var_'
module_interp.f:(.text+0xc95a): undefined reference to `ncvgt_'
module_interp.f:(.text+0xcca7): undefined reference to `ncvgt_'
module_interp.f:(.text+0xcf87): undefined reference to `ncvgt_'
make: [ARWpost.exe] Error 1 (ignored)

这个错误是因为libnetcdf.a 和libnetcdff.a缺失造成的
在configure.arwp里面加入libnetcdf.a和libnetcdff.a的库文件路径就可以了
LDFLAGS        =-L /usr/local/netcdf/lib -lnetcdf -lnetcdff  
下面是一段英文解释:
added the CPPFLAG -I/path/to/netcdf/include, and the LDFLAG "-L/path/to/netcdf/lib -lnetcdf -lnetcdff". This may be a little overkill, but it did the trick for me and I now have the ARWpost.exe program in my directory.
★★★★★★★★★★★★
2014年4月21日最新发现:
要想在编译ARWpost时改的彻底
要修改目录/ARWpost/src里的makefile:
ARWpost.exe: $(OBJS)
$(FC) $(FFLAGS) $(LDFLAGS) -o $@ $(OBJS)  \
  -L$(NETCDF)/lib -I$(NETCDF)/include  -lnetcdf
这段改为:
ARWpost.exe: $(OBJS)
$(FC) $(FFLAGS) $(LDFLAGS) -o $@ $(OBJS)  \
  -L$(NETCDF)/lib -I$(NETCDF)/include  -lnetcdf -lnetcdff
这样在编译的时候才编译的彻底。
★★★★★★★★★★★★


2、rip的安装:
安装步骤:
./configure
make
make install
rip.png
如果顺利的话,在RIP的src文件内有上图中阴影部分里面的这些可执行文件就证明安装成功了。
一定注意,一定要看到有rip的可执行文件,其他可执行文件在失败的情况下也是会生成的,一定要生成rip才算成功。

在编译rip的时候,一般也会碰到找不到gcc库文件
/usr/bin/ld: cannot find -lg2c这样的问题
解决办法是:在configure.rip内修改下面部分
LOCAL_LIBS    = -L/usr/X11R6/lib -lX11 -L/usr/local/pgi/linux86/lib -lpgftnrtl -lpgc -L/usr/lib/gcc/i686-redhat-linux/4.4.4 -lg2c
修改为下面:
LOCAL_LIBS    = -L/usr/X11R6/lib -lX11 -L/usr/local/pgi/linux86/lib -lpgftnrtl -lpgc -L/usr/lib/gcc/i386-redhat-linux/4.4.4 -lf2c
首先要找到你gcc的安装路径,和版本
可用gcc --version来检测gcc版本

还会碰到的一个问题是有关ncarg的库文件缺失的问题
在configure.rip内修改下面部分
LDFLAGS     = -L/usr/local/ncarg/lib -lncarg加入libncarg.a的库文件路径就可以了

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-10-27 21:12:15 | 显示全部楼层
先占好位,后续抽时间再慢慢补全
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-27 21:36:06 | 显示全部楼层
我说楼主,你占了好几楼也没有上传文档啊?,有的话请补全
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-27 21:39:47 | 显示全部楼层
楼主喜欢爬楼啊!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-27 21:52:19 | 显示全部楼层
好,那就来期待楼主的大作了,一气占了7层啊
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表