文章目录
libifport.so.5: cannot open shared object file: No such file or directory
本文主要解决在linux环境下调用Fortran动态库失败的问题。
一、问题描述
在centos7.9系统上,我在通过python调用Fortran编译的动态库文件forcn.so
时报错libifport.so.5: cannot open shared object file: No such file or directory
。
二、解决过程
1. 确定问题原因
根据 ldd forcn.so 命令的输出,可以看到 forcn.so 缺少以下动态链接库:
- libifport.so.5
- libifcore.so.5
- libimf.so
- libsvml.so
- libintlc.so.5
这些缺失的库是 Intel Fortran Compiler 的运行时库。由于它们缺失,导致 forcn.so 无法正确加载。
解决这个问题的关键是确保这些运行时库存在,并且能够被系统正确找到。通常,这些库应该是通过安装 Intel Fortran Compiler 来获得的,但是在某些情况下,它们可能被安装在非标准路径下。
2. 拷贝依赖的动态库
理论上只需要将forcn.so与其他的依赖库放到同级目录下就可以识别到。
将编译环境的依赖文件放到目标动态库同级目录下,
此时可以看到链接正常:
3. 设置环境变量
但这时python脚本仍然调用不了这个so文件,还需要将动态库的路径添加到环境变量中:
- 编辑配置文件,将so文件所在的目录写到配置文件里。
vi /etc/ld.so.conf
- 让动态链接库为系统所共享
ldconfig
- 查看环境变量
echo $LD_LIBRARY_PATH
- 此时python就能正常调用forcn.so动态库了,注意脚本中的forcn.so文件的路径。
三、安装linux下编译fortran的环境
1. 运行install.sh安装脚本
将从官网下载的压缩包解压到想要存放的目录
运行文件夹下的install.sh
2. 通过证书安装
运行过程中,会要求输入序列号,这时选择通过证书安装,输入证书路径。
3. 安装成功
接下来无脑下一步,安装成功,这是最后一步安装成功界面:
4. 缺少环境变量
安装成功后执行ifort --version,报错command not found
5. 设置环境变量
vi ~/.bashrc
- 在.bashrc文件的末尾添加以下行,将安装路径添加到PATH环境变量中:
export PATH=/opt/intel/bin:$PATH
- 在vi编辑器中,按下Esc键,然后输入:wq并按Enter键保存文件
- 使更改生效:执行以下命令使更改生效:
source ~/.bashrc
- 验证:输入以下命令验证是否已成功添加到PATH环境变量中:
echo $PATH
- 输出结果:
6. 缺少所需的32位动态链接库
还是报错,系统缺少所需的32位动态链接库,导致无法运行32位的ifort二进制文件。
解决此问题的一种方法是安装系统的32位兼容性库:yum install glibc.i686
7.安装共享文件
安装成功后继续报错,系统缺少名为libgcc_s.so.1的共享库文件:
这个错误提示意味着系统缺少名为libgcc_s.so.1的共享库文件,安装 libgcc 的 32 位版本:yum install libgcc.i686
8. 安装成功
安装完成后,再次运行ifort --version,成功。