计算化学公社

 找回密码 Forget password
 注册 Register
Views: 5544|回复 Reply: 7
打印 Print 上一主题 Last thread 下一主题 Next thread

[编译与编译器] GCC版本太新了确实不好

[复制链接 Copy URL]

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

跳转到指定楼层 Go to specific reply
楼主
如题。在昨天的帖子(http://bbs.keinsci.com/forum.php ... 5906&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
#-----------------------------------------------------------------------------------


修改之后,编译通过。

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

评分 Rate

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

查看全部评分 View all ratings

52

帖子

0

威望

1656

eV
积分
1708

Level 5 (御坂)

2#
发表于 Post on 2017-5-19 10:38:55 | 只看该作者 Only view this author
借问一下BerkeleyGW怎么下载到的?

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

3#
 楼主 Author| 发表于 Post on 2017-5-19 10:41:08 | 只看该作者 Only view this author
ORCA_in_TCC 发表于 2017-5-19 10:38
借问一下BerkeleyGW怎么下载到的?

www.berkeleygw.org可以下载。

要先注册。

52

帖子

0

威望

1656

eV
积分
1708

Level 5 (御坂)

4#
发表于 Post on 2017-5-19 10:48:43 | 只看该作者 Only view this author
本帖最后由 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]*

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

5#
 楼主 Author| 发表于 Post on 2017-5-19 10:51:08 | 只看该作者 Only view this author
ORCA_in_TCC 发表于 2017-5-19 10:48
就是注册的时候有个问题老是通不过,不知道怎么回答,还请指教What does the G stand for in the name of ...

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

52

帖子

0

威望

1656

eV
积分
1708

Level 5 (御坂)

6#
发表于 Post on 2017-5-19 11:11:57 | 只看该作者 Only view this author
万里云 发表于 2017-5-19 10:51
Green's Function,第二个词是Function。

见笑了,我其实知道Green Function

903

帖子

37

威望

5324

eV
积分
6967

Level 6 (一方通行)

7#
发表于 Post on 2017-5-19 22:25:03 | 只看该作者 Only view this author
看到GW就头疼。PTSD发作了

230

帖子

0

威望

919

eV
积分
1149

Level 4 (黑子)

8#
发表于 Post on 2017-5-20 05:34:25 | 只看该作者 Only view this author
ggdh 发表于 2017-5-19 22:25
看到GW就头疼。PTSD发作了

GW没搞过,NEGF弄过一段,感觉还行。

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-24 02:55 , Processed in 0.201687 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list