使用gfortran+f2py编译后在Jupyter导入.so文件遇符号缺失错误
Macports安装Python/GCC后,f2py编译的.so文件在Jupyter导入时缺失gfortran符号
- 环境:搭载Ventura 13.6.9系统的iMac,通过Macports安装Python与GCC
- 核心问题:使用gfortran和f2py编译Fortran代码生成*.so文件后,在Jupyter中导入时报错
Symbol not found: __gfortran_compare_string(Python 3.12环境下具体报错为__gfortran_set_args) - 已尝试版本:gcc11、gcc12、gcc14以及python3.11、3.12、3.13均存在相同问题,仅Python 3.7可正常配合f2py使用
极简复现案例
1. Fortran代码文件 Trial.f
program Trial call Check() end subroutine Check() print *, 'Hello World' return end
2. 编译命令(两种方式结果一致)
f2py --fcompiler=/opt/local/bin/gfortran-mp-14 -L/opt/local/lib/gcc14 -c -m Trial_Py Trial.f f2py -c -m Trial_Py Trial.f
3. f2py识别gfortran的特殊处理
必须在PATH路径下的my_bin文件夹中创建符号链接:
ln -s /opt/local/bin/gfortran-mp-14 /path/to/my_bin/gfortran
否则即便/opt/local/bin在PATH中,f2py仍无法找到gfortran-mp-14
4. Python 3.12环境Jupyter导入错误信息
执行导入语句:
import Trial_Py
报错:
ImportError Traceback (most recent call last) Cell In[1], line 1 ----> 1 import Trial_Py ImportError: dlopen(/Users/dany/TMP/Trial_Py.cpython-312-darwin.so, 0x0002): Symbol not found: __gfortran_set_args Referenced from: <6F42A5D4-A263-370E-9CA6-B0968DE5C17D> /Users/dany/TMP/Trial_Py.cpython-312-darwin.so Expected in: unknown
当前libgfortran文件状态
所有相关libgfortran文件均指向同一份文件:
-rwxr-xr-x 1 root wheel 1778544 Aug 12 2024 /opt/local/lib/libgcc/libgfortran.5.dylib lrwxr-xr-x 1 root wheel 19 Aug 12 2024 /opt/local/lib/libgcc/libgfortran.dylib -> libgfortran.5.dylib lrwxr-xr-x 1 root wheel 19 Aug 12 2024 /opt/local/lib/gcc14/libgfortran.dylib -> libgfortran.5.dylib lrwxr-xr-x 1 root wheel 41 Aug 12 2024 /opt/local/lib/gcc14/libgfortran.5.dylib -> /opt/local/lib/libgcc/libgfortran.5.dylib
环境变量LIBRARY_PATH为空。
内容的提问来源于stack exchange,提问作者Dany Page
相关产品推荐
相关产品推荐

