|
本帖最后由 啊不错的飞过海 于 2023-12-3 22:02 编辑
在10月29日的更新之后,包管理器spack终于可以使用gcc-13/Makefile安装支持全部可选依赖的cp2k了,特开一贴,分享一下喜悦。
太长不看版
总之执行这一串就对了(
- cd ${HOME}
- mkdir soft
- cd soft
- git clone -c feature.manyFiles=true https://github.com/spack/spack.git
- export SPACK_ROOT=${HOME}/soft/spack
- source ${SPACK_ROOT}/share/spack/setup-env.sh
- spack compiler find
- spack install binutils
- spack install gcc@13+binutils
- spack external find
- spack load gcc@13
- spack compiler find
- spack install cp2k%gcc@13
复制代码
Spack的安装
在一个可以写的文件夹里运行
- git clone -c feature.manyFiles=true https://github.com/spack/spack.git
复制代码
Spack的运行
运行以下命令配置spack环境变量。
- export SPACK_ROOT=${HOME}/soft/spack
- source ${SPACK_ROOT}/share/spack/setup-env.sh
复制代码 可以把这两行写进~/.bashrc里。对于大部分系统来讲,这一步不会有输出。
但是吧,这一步调用一些旧系统没有预装的动态库而报错,楼主为什么会知道呢,真是个悲伤的故事。。。
解决方案见最下。
用Spack安装编译器、cp2k
Spack支持在同一系统下安装多个版本的同一编译器。作为一个2023年的用户,我们选择最新的gcc-13.
首先让spack找到系统里已有的编译器和一些软件:
安装gcc:
接下来就可以安cp2k了。不妨先看看介绍:
- spack info cp2k
- spack install cp2k%gcc@13 +elpa
复制代码 这样,cp2k就安装上了。
CP2K的运行
spack安上的CP2K已经通过-Wl,-rpath设过库搜索路径,不需要设LD_LIBRARY_PATH等环境变量。运行
即可以mpirun [OPTIONS] cp2k.psmp调用CP2K,此时已自动设置了CP2K、编译使用的MPI等软件进PATH;也可以用绝对路径调用。
常见问题
1.centos7等老旧系统上source ${SPACK_ROOT}/share/spack/setup-env.sh会出现如下报错,如何解决?
Traceback (most recent call last):
File "/home/yizeyi18/soft/spack/bin/spack", line 54, in <module>
sys.exit(main())
File "/home/yizeyi18/soft/spack/lib/spack/spack_installable/main.py", line 35, in main
import spack.main # noqa: E402
File "/home/yizeyi18/soft/spack/lib/spack/spack/main.py", line 31, in <module>
from llnl.util.tty.log import log_output
File "/home/yizeyi18/soft/spack/lib/spack/llnl/util/tty/log.py", line 9, in <module>
import ctypes
File "/usr/local/python3/lib/python3.10/ctypes/__init__.py", line 8, in <module>
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
这是缺少libffi动态库的表现。视系统不同执行如下命令:- sudo yum install libffi-devel
- sudo apt-get install libffi-dev
复制代码 执行完之后,退出登录,再重新运行下列命令,否则会因为setup-env.sh里的一些防呆命令失败。
- export SPACK_ROOT=${HOME}/soft/spack
- source ${SPACK_ROOT}/share/spack/setup-env.sh
复制代码 有同学可能会问,我没有sudo权限,该怎么办?
——搞个自带libffi的python发行版,比如miniconda,安上,用它的环境。
2.sirius平面波模块安装失败了,怎么办?
这是gcc-13的c++检查带来的问题;spack里的sirius-7.5.0已修复了。面向旧版本spack的解决方法如下:
-在${SPACK_ROOT}/var/spack/repo/builtin/packages/sirius里创建一个长这样的文件,不妨命名为gcc-13.patch:
- diff --git a/src/SDDK/memory.hpp b/src/SDDK/memory.hpp
- index ba7a2ed..b4af9ec 100644
- --- a/src/SDDK/memory.hpp
- +++ b/src/SDDK/memory.hpp
- @@ -35,6 +35,7 @@
- #include <array>
- #include <complex>
- #include <cassert>
- +#include <cstdint>
- #include "gpu/acc.hpp"
- namespace sddk {
- diff --git a/src/typedefs.hpp b/src/typedefs.hpp
- index 75a0bf5..b796770 100644
- --- a/src/typedefs.hpp
- +++ b/src/typedefs.hpp
- @@ -32,6 +32,7 @@
- #include <array>
- #include <limits>
- #include <map>
- +#include <cstdint>
- #include <algorithm>
- /// Spin-blocks of the Hamiltonian.
复制代码 -在${SPACK_ROOT}/var/spack/repo/builtin/packages/sirius/packages.py第190行加这么一句:
- patch("gcc-13.patch", when="@7.4.3%gcc@13.1.0:")
复制代码 于是sirius就能过编译了。
3.编译时出现了如下报错,如何解决?
/lots/of/path/somename.a: error adding symbols: File format not recognized
这是使用的binutils不支持编译somename.a时binutils压缩符号表的压缩算法导致。可运行如下命令:
一般即可解决。
|
评分 Rate
-
查看全部评分 View all ratings
|