编译依赖LAPACK的程序时遇-larmpl_lp64找不到错误求助
问题描述
编译依赖LAPACK的QP2程序时,出现链接错误:
FAILED: /home/parallels/qp2/src/basis_correction/basis_correction gfortran -g -ffree-line-length-none -I . -fPIC -march=native -fopenmp -I ao_basis/ -I ao_one_e_ints/ -I ao_two_e_erf_ints/ -I ao_two_e_ints/ -I aux_quantities/ -I basis/ -I becke_numerical_grid/ -I bitmask/ -I cas_based_on_top/ -I csf/ -I davidson/ -I davidson_undressed/ -I density_for_dft/ -I determinants/ -I dft_keywords/ -I dft_one_e/ -I dft_utils_func/ -I dft_utils_in_r/ -I electrons/ -I ezfio_files/ -I functionals/ -I mo_basis/ -I mo_one_e_ints/ -I mo_two_e_erf_ints/ -I mo_two_e_ints/ -I mpi/ -I mu_of_r/ -I nuclei/ -I pseudo/ -I two_body_rdm/ -I two_rdm_routines/ -I utils/ -I zmq/ /home/parallels/qp2/src/basis_correction/IRPF90_temp/basis_correction.irp.o /home/parallels/qp2/src/basis_correction/IRPF90_temp/basis_correction.irp.module.o /home/parallels/qp2/src/basis_correction/IRPF90_temp/irpf90.a -larmpl_lp64 /home/parallels/qp2/lib/libezfio_irp.a /home/parallels/qp2/lib/libf77zmq.a /home/parallels/qp2/lib/libzmq.a -lstdc++ -lrt -ldl -lz -o /home/parallels/qp2/src/basis_correction/basis_correction /usr/bin/ld: cannot find -larmpl_lp64: No such file or directory collect2: error: ld returned 1 exit status
已安装Arm Performance Libraries (ArmPL),但错误依旧。配置.cfg文件中相关配置为:
LAPACK_LIB : -larmpl_lp64
ArmPL目录中存在名称相似的库文件,但不确定编译程序需要的具体文件。
解决步骤
1. 定位ArmPL库文件的实际路径
进入ArmPL的安装目录(比如默认路径/opt/arm/armpl,或你自定义的安装路径),查看lib子目录下的文件。你需要找的是:
- 动态库:
libarmpl_lp64.so - 静态库:
libarmpl_lp64.a
注意ArmPL分x86_64和aarch64版本,必须和你的系统架构匹配。可以用file命令验证:
file /path/to/armpl/lib/libarmpl_lp64.so
输出应显示与当前系统一致的架构(比如x86-64或ARM aarch64)。
2. 让编译器识别库路径
方法一:修改配置文件
直接在.cfg文件的LAPACK_LIB中添加库路径(-L参数):
LAPACK_LIB : -L/path/to/armpl/lib -larmpl_lp64
将/path/to/armpl/lib替换为你实际找到的ArmPL库目录。
方法二:设置环境变量
在编译前执行以下命令,让编译器能找到库文件:
# 编译时查找静态/动态库的路径 export LIBRARY_PATH=/path/to/armpl/lib:$LIBRARY_PATH # 运行时查找动态库的路径 export LD_LIBRARY_PATH=/path/to/armpl/lib:$LD_LIBRARY_PATH
方法三:使用ArmPL的配置脚本
ArmPL通常会提供环境配置脚本(比如armpl.sh或armpl.csh),直接source即可自动配置路径:
source /path/to/armpl/bin/armpl.sh
3. 验证库的可用性
运行以下命令检查链接器能否找到库:
ld -larmpl_lp64 -L/path/to/armpl/lib --verbose
如果输出中显示找到libarmpl_lp64.so或libarmpl_lp64.a,说明路径配置正确。
4. 备选方案:使用系统自带LAPACK
如果ArmPL配置仍有问题,可以改用系统自带的LAPACK/BLAS库:
- 安装系统开发包(以Ubuntu为例):
sudo apt install liblapack-dev libblas-dev - 修改.cfg文件:
LAPACK_LIB : -llapack -lblas
内容的提问来源于stack exchange,提问作者chikako
相关产品推荐
相关产品推荐

