请选择 进入手机版 | 继续访问电脑版

计算化学公社

 找回密码
 现在注册!
查看: 362|回复: 7

[Linux] GCC版本太新了确实不好

[复制链接]

141

帖子

4

威望

1450

eV
积分
1671

Level 5 (御坂)

发表于 2017-5-19 10:09:56 | 显示全部楼层 |阅读模式
如题。在昨天的帖子(http://ccc.keinsci.com/forum.php ... &extra=page%3D1)里提到如果软件太新,编译或运行时就可能出问题。现在把这个问题写下来,以后可能其他人也会碰到。
在主力服务器上编译软件,为了运行效率一般用Intel编译器。而自己电脑一来不适合干重活,二来装编译器太麻烦,因此一般用自带的GCC。比较保守的服务器用发行版如CentOS,现在还在用 GCC 4.x,而桌面用发行版(Ubuntu/Fedora)早已飙到了6.x。昨天在Fedora 25下编译BerkeleyGW一直报错,一开始是预处理错误,改了预处理选项之后是编译错误。查了好久才发现原来是GCC 6.x的预处理器cpp默认行为和4.x不一样了。


为了适应不同的硬件和软件环境,软件源码中会包含大量预处理指令。gfortran没有单独的预处理器,借用的是C语言预处理器cpp。问题是C语言的处理器对FORTRAN源码有些水土不服,比如//在C++中会被当作注释直接移除,而FORTRAN中是有效代码。所幸cpp有-C选项,可以保留所有注释。但问题也就出在这里。

对于GCC 4.x,cpp -C只会展开宏和处理一些条件编译指令,不会画蛇添足。但对于GCC 6.x,cpp -C会在源码中插入glibc的权责声明。这些声明用的是C风格的区块注释。Fortran源码中插入C的注释,自然就报错了。

翻遍GCC手册也没找到选项能禁用这一特性。最后想了个权宜之计:写一个python程序移除C风格注释;再修改Makefile,在预处理命令和编译命令之间新加一步操作。
#--------------------------- workarond for GCC > 4.x  -----------------------
#clang C-preprocessing treats files incorrectly if they have .F90 extension
ifeq ($(findstring clang,$(FCPP)),clang)
  f90_CPP = cp $(basename $<).f90 $(basename $<)_cp.F90; $(FCPP) $(INCLUDE) $(CPPOPT) $(basename $<)_cp.F90 > $(basename $<).p.f; $(REMOVE) $(basename $<)_cp.F90
else
  f90_CPP = $(FCPP) $(INCLUDE) $(CPPOPT) $< > $(basename $<).p.f; $(PREFIX)/rmcmt.py $(basename $<).p.f
endif
F90_CPP = $(FCPP) -P $(INCLUDE) $(CPPOPT) $< > $(basename $<).p.f; $(PREFIX)/rmcmt.py $(basename $<).p.f
#-----------------------------------------------------------------------------------


修改之后,编译通过。

后记:以后碰到新事物,先让别人去探探地雷

评分

参与人数 4eV +20 收起 理由
stecue + 5 好萌好萌好萌!
ggdh + 5 水好深,感谢分享
sobereva + 5 欢迎讨论
didi_dudu + 5 好物!

查看全部评分

41

帖子

0

威望

1162

eV
积分
1203

Level 4 (黑子)

发表于 2017-5-19 10:38:55 | 显示全部楼层
借问一下BerkeleyGW怎么下载到的?

141

帖子

4

威望

1450

eV
积分
1671

Level 5 (御坂)

 楼主| 发表于 2017-5-19 10:41:08 | 显示全部楼层
ORCA_in_TCC 发表于 2017-5-19 10:38
借问一下BerkeleyGW怎么下载到的?

www.berkeleygw.org可以下载。

要先注册。

41

帖子

0

威望

1162

eV
积分
1203

Level 4 (黑子)

发表于 2017-5-19 10:48:43 | 显示全部楼层
本帖最后由 ORCA_in_TCC 于 2017-5-19 10:49 编辑

就是注册的时候有个问题老是通不过,不知道怎么回答,还请指教What does the G stand for in the name of this code? (only give the *second* word) [size=14.0096px]*

141

帖子

4

威望

1450

eV
积分
1671

Level 5 (御坂)

 楼主| 发表于 2017-5-19 10:51:08 | 显示全部楼层
ORCA_in_TCC 发表于 2017-5-19 10:48
就是注册的时候有个问题老是通不过,不知道怎么回答,还请指教What does the G stand for in the name of ...

Green's Function,第二个词是Function。

41

帖子

0

威望

1162

eV
积分
1203

Level 4 (黑子)

发表于 2017-5-19 11:11:57 | 显示全部楼层
万里云 发表于 2017-5-19 10:51
Green's Function,第二个词是Function。

见笑了,我其实知道Green Function

336

帖子

6

威望

1034

eV
积分
1490

Level 4 (黑子)

发表于 2017-5-19 22:25:03 | 显示全部楼层
看到GW就头疼。PTSD发作了

228

帖子

0

威望

816

eV
积分
1044

Level 4 (黑子)

发表于 2017-5-20 05:34:25 | 显示全部楼层
ggdh 发表于 2017-5-19 22:25
看到GW就头疼。PTSD发作了

GW没搞过,NEGF弄过一段,感觉还行。
您需要登录后才可以回帖 登录 | 现在注册!

本版积分规则

Archiver|手机版|小黑屋|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949-1号 )

GMT+8, 2017-9-24 12:57 , Processed in 0.093578 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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