计算化学公社

标题: XCrySDen在CentOS上的傻瓜式安装方法 [打印本页]

作者
Author:
sobereva    时间: 2020-7-22 06:27
标题: XCrySDen在CentOS上的傻瓜式安装方法
XCrySDen在CentOS上的傻瓜式安装方法
Foolproof installation method of XCrySDen on CentOS

文/Sobereva@北京科音  2020-Jul-22


1 前言

XCrySDen(http://www.xcrysden.org)是非常流行的第一性原理程序Quantum ESPRESSO用户经常用的重要工具,可以观看输入输出文件、观看轨迹、设置k点等,而且作图效果挺不错。XCrySDen在Ubuntu上比较容易运行,但对于做计算化学的人用得非常多的CentOS就不那么容易了。XCrySDen很老的版本提供了semishared版,在CentOS里解压后就能运行,但较新的XCrySDen官方只提供了shared版(至少是对于撰文时最新的1.6.2版而言),里面涉及的一些动态库在CentOS里没有相应的源。为了让CentOS用户用XCrySDen毫无障碍,笔者在CentOS下编译了XCrySDen,并且同时提供了傻瓜式编译的源代码包。


2 预编译版XCrySDen的安装

下载http://sobereva.com/attach/564/xcrysden-1.6.2_sobereva.tar.gz。解压后,进入此目录,运行./xcrysden就可以启动了。如果在~/.bashrc目录下加上export PATH=$PATH:[XCrySDen的目录名],则重新进入终端后就可以在任意目录下直接启动XCrySDen了。

这个笔者编译的XCrySDen 1.6.2在CentOS 7系列各个版本上都可以运行。如果读者装系统的时候装的方式和《在VMware 15中安装CentOS 7.6的完整过程视频演示》(http://sobereva.com/454)里演示的相同,不需要装额外的库就可以直接运行。如果运行时提示缺库,Google一下报错提示,用yum安装相应的包即可。

对于CentOS 8.0,笔者发现没法直接运行,但只要把解压后目录下的tcl目录下的xcInit.tcl里的两处0m都改为0就可以运行,并且关闭程序的时候必须点击右上角强行关闭。


3 XCrySDen的编译

下面是基于笔者修改的XCrySDen 1.6.2的源代码包的编译过程。前面说的笔者的预编译版如果能正常用就没必要自己编译。在CentOS 7.x和8.0下按以下方法都能编译通过。

运行以下命令安装编译过程要用的库
yum install libGL-devel libGLU-devel libXmu-devel

机子里应当已经装了gcc和gfortran,如果没装的话运行yum install gcc-gfortran来安装。

下载笔者修改的源代码包:http://sobereva.com/attach/564/xcrysden-1.6.2_src_sobereva.tar.gz。解压后进入其中,运行make all即可,大约5分钟就能编译完毕。之后直接运行./xcrysden即可启动。

对于某些CentOS版本,比如CentOS 7.4,编译中途可能失败,需要在解压目录下的Makefile中的X_LIB=后面加入-lXss选项,然后重新make all。经测试至少对于CentOS 7.7不用加这个。

关于笔者修改的XCrySDen源代码包的一些细节:Make.sys文件是在system/Make.sys-shared基础上修改的,原先的这个文件完全没法用,笔者改了许多地方才终于令编译能成功。具体改了哪些,自行对照Make.sys-shared就知道了。Makefile文件也做了修改,把all:后面的mesa去掉了,因为CentOS的源直接就有这个,通过前述的yum步骤已经安装了,因此就没必要再在make all的时候编译了。其实对于CentOS 8,由于源里的tcl/tk已经升为了XCrySDen 1.6.2要求的8.6版,因此不编译tcl/tk而直接通过源来装也不是不可以。另外,原本make all的时候会自动下载tcl、tk、Togl、fftw、bwidget包,但在大陆地区由于网速问题,很容易中途下载失败。因此笔者直接将这些压缩包放到了external/src目录下,这样编译过程中就会自动利用,而不自动下载这些包了。
作者
Author:
zsu007    时间: 2020-7-22 07:26
谢谢社长的分享!
作者
Author:
rabbitkiller    时间: 2020-7-22 10:18
赞社长!当初为了编译Xcrysden被折磨得欲哭无泪  以后就方便啦!
作者
Author:
Penson    时间: 2020-8-16 18:45
大赞社长,这个软件一直看着眼馋
作者
Author:
ChemG    时间: 2020-10-14 08:36
非常非常感谢社长,可以使用啦。第一次安装的时候打不开,后来运行yum install libGL-devel libGLU-devel libXmu-devel后,再使用社长修改的XCrySDen 1.6.2的源代码包编译就可以成功打开啦。我是Vmware 15.5, centos 7.8,可能之前是我的库不全吧。
作者
Author:
liujie2020    时间: 2020-12-26 12:25
社长您好,我在按照您的教程安装预编译的XCrySDen时,解压之后运行XCrySDen时出现了附件图片中的问题,,想请教一下这个应该怎么解决。

作者
Author:
liujie2020    时间: 2020-12-26 12:57
liujie2020 发表于 2020-12-26 12:25
社长您好,我在按照您的教程安装预编译的XCrySDen时,解压之后运行XCrySDen时出现了附件图片中的问题,,想 ...

社长,不好意思,补充一下,我在虚拟机中是可以运行的,但是我用SSH远程连接之后运行不了,我想解决这个问题
作者
Author:
liujie2020    时间: 2020-12-26 13:06
liujie2020 发表于 2020-12-26 12:57
社长,不好意思,补充一下,我在虚拟机中是可以运行的,但是我用SSH远程连接之后运行不了,我想解决这个 ...

社长,我安装了MobaXterm远程连接就行了,现在已解决,麻烦社长了
作者
Author:
hitvip    时间: 2021-9-7 08:38
本帖最后由 hitvip 于 2021-9-7 09:08 编辑

我的系统是 : CentOS Linux release 8.4.2105

预编译版本运行会提示错误,所以我尝试自己编译卢老师修改后的源代码(谢谢卢老师的辛勤劳动成果),但 make all 后提示:

  1. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `ZlibStreamCleanup':
  2. tclZlib.c:(.text+0x3d): undefined reference to `inflateEnd'
  3. tclZlib.c:(.text+0xc1): undefined reference to `deflateEnd'
  4. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `ConvertError':
  5. tclZlib.c:(.text+0x3b5): undefined reference to `zError'
  6. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `ZlibTransformOutput':
  7. tclZlib.c:(.text+0xd58): undefined reference to `deflate'
  8. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `ZlibTransformClose':
  9. tclZlib.c:(.text+0xf0b): undefined reference to `deflate'
  10. tclZlib.c:(.text+0xf3c): undefined reference to `deflateEnd'
  11. tclZlib.c:(.text+0x104f): undefined reference to `inflateEnd'
  12. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `SetDeflateDictionary.part.0':
  13. tclZlib.c:(.text+0x10d0): undefined reference to `deflateSetDictionary'
  14. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `SetInflateDictionary.part.1':
  15. tclZlib.c:(.text+0x1100): undefined reference to `inflateSetDictionary'
  16. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `ZlibTransformSetOption':
  17. tclZlib.c:(.text+0x12a9): undefined reference to `deflate'
  18. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `ResultGenerate':
  19. tclZlib.c:(.text+0x1601): undefined reference to `inflate'
  20. tclZlib.c:(.text+0x16b0): undefined reference to `inflate'
  21. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibStreamInit':
  22. tclZlib.c:(.text+0x213e): undefined reference to `inflateInit2_'
  23. tclZlib.c:(.text+0x22a1): undefined reference to `deflateInit2_'
  24. tclZlib.c:(.text+0x22bf): undefined reference to `deflateSetHeader'
  25. tclZlib.c:(.text+0x22d8): undefined reference to `inflateGetHeader'
  26. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibStreamReset':
  27. tclZlib.c:(.text+0x2535): undefined reference to `inflateEnd'
  28. tclZlib.c:(.text+0x25d5): undefined reference to `inflateInit2_'
  29. tclZlib.c:(.text+0x2654): undefined reference to `deflateInit2_'
  30. tclZlib.c:(.text+0x26b1): undefined reference to `deflateEnd'
  31. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibStreamPut':
  32. tclZlib.c:(.text+0x2896): undefined reference to `deflateBound'
  33. tclZlib.c:(.text+0x28d1): undefined reference to `deflate'
  34. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibStreamGet':
  35. tclZlib.c:(.text+0x2ba5): undefined reference to `inflate'
  36. tclZlib.c:(.text+0x2cbb): undefined reference to `inflate'
  37. tclZlib.c:(.text+0x2f0e): undefined reference to `inflate'
  38. tclZlib.c:(.text+0x2ffe): undefined reference to `inflateEnd'
  39. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibDeflate':
  40. tclZlib.c:(.text+0x3aef): undefined reference to `deflateInit2_'
  41. tclZlib.c:(.text+0x3b07): undefined reference to `deflateSetHeader'
  42. tclZlib.c:(.text+0x3b1a): undefined reference to `deflateBound'
  43. tclZlib.c:(.text+0x3b3e): undefined reference to `deflate'
  44. tclZlib.c:(.text+0x3b4f): undefined reference to `deflateEnd'
  45. tclZlib.c:(.text+0x3c74): undefined reference to `deflateEnd'
  46. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibInflate':
  47. tclZlib.c:(.text+0x3daa): undefined reference to `inflateEnd'
  48. tclZlib.c:(.text+0x3f23): undefined reference to `inflateInit2_'
  49. tclZlib.c:(.text+0x3f43): undefined reference to `inflateGetHeader'
  50. tclZlib.c:(.text+0x3f8b): undefined reference to `inflate'
  51. tclZlib.c:(.text+0x401d): undefined reference to `inflateEnd'
  52. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibCRC32':
  53. tclZlib.c:(.text+0x4117): undefined reference to `crc32'
  54. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `Tcl_ZlibAdler32':
  55. tclZlib.c:(.text+0x4127): undefined reference to `adler32'
  56. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `ZlibCmd':
  57. tclZlib.c:(.text+0x41d0): undefined reference to `inflateInit2_'
  58. tclZlib.c:(.text+0x4240): undefined reference to `inflateEnd'
  59. tclZlib.c:(.text+0x425d): undefined reference to `deflateEnd'
  60. tclZlib.c:(.text+0x501c): undefined reference to `deflateInit2_'
  61. tclZlib.c:(.text+0x5246): undefined reference to `deflateSetHeader'
  62. tclZlib.c:(.text+0x5283): undefined reference to `inflateGetHeader'
  63. /home/pfg/Apps/xcrysden-1.6.2/external/lib/libtcl8.6.a(tclZlib.o): In function `TclZlibInit':
  64. tclZlib.c:(.text+0x5372): undefined reference to `zlibVersion'
  65. collect2: error: ld returned 1 exit status
  66. make[2]: *** [Makefile:30: xcrys] Error 1
  67. make[2]: Leaving directory '/home/pfg/Apps/xcrysden-1.6.2/C'
  68. make[1]: *** [Makefile:22: compile] Error 2
  69. make[1]: Leaving directory '/home/pfg/Apps/xcrysden-1.6.2/C'
  70. make: *** [Makefile:83: src-C] Error 2
  71. (qe) [pfg@cent8-localdomain xcrysden-1.6.2]$
复制代码


好像和 zlibVersion 有关系?如何处理呢?   谢谢~



作者
Author:
破晓时的曙光    时间: 2021-10-25 19:41
hitvip 发表于 2021-9-7 08:38
我的系统是 : CentOS Linux release 8.4.2105

预编译版本运行会提示错误,所以我尝试自己编译卢老师修 ...

遇到同样的问题

作者
Author:
丁越    时间: 2021-12-30 17:33
破晓时的曙光 发表于 2021-10-25 19:41
遇到同样的问题

在我的centOS8上编译也是同样有问题。安装了预编译包,虽然能正常打开图形界面,但是运行xcrysden的时候会报无法调用ftnunit的错误,yum安装了libgfortran.so.3动态库也不好使。
可以在win下装个Xmind和Cygwin从而使用xcrysden,参考这个视频https://www.youtube.com/channel/UCNqAUoifyM2hxaiVA4zJ-5w去装。
Cygwin还挺好使的,甚至比cmder在命令操作上更能接近Linux
作者
Author:
丁越    时间: 2022-1-12 12:41
本帖最后由 丁越 于 2022-1-12 12:43 编辑
丁越 发表于 2021-12-30 17:33
在我的centOS8上编译也是同样有问题。安装了预编译包,虽然能正常打开图形界面,但是运行xcrysden的时候 ...

使用预编译版时dnf install compat-libgfortran-48就解决问题了
作者
Author:
小猫无极    时间: 2023-10-17 23:14
本帖最后由 小猫无极 于 2023-10-17 23:17 编辑

社长您好,我在使用预编译版XCrySDen的时候,跳出来这个窗口 o(╥﹏╥)o,使用的是vmware下创建的Ubuntu22.04虚拟机
作者
Author:
sobereva    时间: 2023-10-18 00:40
小猫无极 发表于 2023-10-17 23:14
社长您好,我在使用预编译版XCrySDen的时候,跳出来这个窗口 o(╥﹏╥)o,使用的是vmware下创建的Ubuntu22. ...

我不用Ubuntu,没法评论
作者
Author:
小猫无极    时间: 2023-10-18 09:37
sobereva 发表于 2023-10-18 00:40
我不用Ubuntu,没法评论

好的,谢谢社长
作者
Author:
Weldingspock    时间: 2024-2-28 16:17
请问一下社长,我在rocky linux 9.2下使用预编译版本的xcrysden出现以下error,画面闪一下就没了,请问该怎么解决呢




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3