- 积分
- 348
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-8-7
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 jazzyl 于 2018-11-4 18:52 编辑
首先感谢家园里面各位大神的无私分享,包括
1)科研菜鸟, http://blog.sciencenet.cn/u/sanshiphy
2)WRF 3.9.1.1 在Ubuntu16.04 LTS 下的安装包括Chem kpp,http://bbs.06climate.com/forum.php?mod=viewthread&tid=57144
秉承着大神的分享精神,我分享一个解决KPP安装问题的办法。需要预先说明的是,这个问题不一定适用所有出现KPP安装问题的情况,但问题解决的思路应该适用于大部分情况。
我的软件环境:Ubuntu 16.04, WRF-Chem 3.8.1,GNU compiler (gcc\g++\gfortran) 5.4.0
KPP安装问题表现:WRF_KPP=0时WRF-Chem能够编译成功,但WRF_KPP=1时则出现问题,编译后没有在main目录下生成ndwon.exe,real.exe,wrf.exe和tc.exe。
解决思路:检查编译日志(也就是命令"./compile em_real >&checkwrf.log"生成的checkwrf.log文件),探索编译程序的出错提示。
解决过程:通过检查编译日志,会发现./compile程序会调用之前安装的yacc和flex编译一系列源码,包括scan.y,y.tab.c,y.tab.o,lex.yy.o等。这个过程日志会显示:
"/usr/local/yacc/yacc -d scan.y
...
gcc -O -c y.tab.c
..."
继续检查日志,会发现问题出错在这一行:
"gcc -O -lm y.tab.o lex.yy.o scanner.o scanutil.o kpp.o gen.o code.o code_c.o code_f77.o code_f90.o code_matlab.o debug.o -L/usr/local/flex/lib -lfl -ll -o kpp"
日志文件会提示说:
"/usr/bin/ld: cannot find -ll
collect2: error: ld returned 1 exit status
Makefile:66: recipe for target 'kpp' failed
make[1]: *** [kpp] Error 1
make[1]: Leaving directory '/home/models/WRFV3/chem/KPP/kpp/kpp-2.1/src'"
这个提示的意思是说编译程序找不到“ll”这个库,换言之,也就是flex中的libl.a文件。接下来的解决思路就简单了,也就是提供一个包括libl.a文件的flex版本。在Ubuntu 16.04上,解决方法是输入"apt-get install flex"安装flex, 然后设置两个环境变量FLEX和FLEX_LIB_DIR:
export FLEX=/usr/bin/flex
export FLEX_LIB_DIR=/usr/lib/x86_64-linux-gnu
最后,重新编译WRF-Chem即可:
./clean -a
./configure
./compile em_real >&checkwrf.log
希望提供的信息有所帮助!有什么反馈和其他办法请大家分享上来。
|
|