Python numpy/f2py 链接库

标签 python numpy linker fortran f2py

我正在尝试使用 f2py 为我的一个 fortran 程序制作一个包装器。我的 Fortran 程序使用外部库,当我尝试链接它们时出现错误消息:

gfortran:f77: /var/folders/46/l1mrxgls07s6tpwb6tgpvhpr0000gn/T/tmpPCM7Ne/src.macosx-10.9-intel-2.7/progs-f2pywrappers.f
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/bin/f2py", line 24, in <module>
    main()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/f2py/f2py2e.py", line 588, in main
    run_compile()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/f2py/f2py2e.py", line 574, in run_compile
    setup(ext_modules = [ext])
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/distutils/core.py", line 186, in setup
    return old_setup(**new_attr)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/distutils/command/build.py", line 37, in run
    old_build.run(self)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build.py", line 127, in run
    self.run_command(cmd_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/distutils/command/build_ext.py", line 232, in run
    self.build_extensions()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build_ext.py", line 448, in build_extensions
    self.build_extension(ext)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/distutils/command/build_ext.py", line 425, in build_extension
    build_temp=self.build_temp,**kws)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ccompiler.py", line 691, in link_shared_object
    extra_preargs, extra_postargs, build_temp, target_lang)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/distutils/fcompiler/__init__.py", line 643, in link
    libraries)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/distutils/ccompiler.py", line 571, in gen_lib_options
    runtime_library_dirs, libraries)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ccompiler.py", line 1086, in gen_lib_options
    lib_file = compiler.find_library_file([lib_dir], lib_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ccompiler.py", line 777, in find_library_file
    raise NotImplementedError

所以,看起来我从 python 库中的文件 ccompiler.py 中得到了错误。

错误对应文件中的以下代码行:

def find_library_file (self, dirs, lib, debug=0):
        """Search the specified list of directories for a static or shared
        library file 'lib' and return the full path to that file.  If
        'debug' true, look for a debugging version (if that makes sense on
        the current platform).  Return None if 'lib' wasn't found in any of
        the specified directories.
        """
        raise NotImplementedError

由于我是 Python 的新手,我对解决这个问题需要做些什么感到有点困惑。好像这个方法还没有实现。我只需要实现它吗?我究竟该如何实现呢?进行此更改时是否需要重建 f2py 可执行文件?如果是这样,我该怎么做?

谢谢!

最佳答案

这里没有回答这个问题,但它确实说明了一个解决方法(直接引用所有 *.o 文件而不是将它们放入库中)。而且,这只是一篇解释有关 f2py 的一些事情的非常棒的帖子。

Including a compiled module in module that is wrapped with f2py (Minimum working example)?

f2py -c --fcompiler=gfortran -I。 libtest.o -m Main main.f90

如果您的库基于单个文件,那么这将起作用。如果您的库(更有可能)基于多个文件,只需包含完整的 *.o 名称集即可。

关于Python numpy/f2py 链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22138596/

相关文章:

c - 找到起点,int main()

linux - 交叉编译树莓派 opencv 链接问题

python - 如何计算循环中python列表中字典的数量?

来自 fileconfig 的 Python 自定义日志处理程序

Python-写入MySQL

使用 numpy 和 gdal 的 Python C 扩展在运行时给出 undefined symbol

python - 停止 Pygame 中的多个键盘输入

python - 如何有效地将大图像分割成多个部分并旋转它们?

python - 从 Pandas DataFrame 中的所有行中减去第一行

c++ - VS2005(或VS2010)从VS2005升级时出现LNK2001和LNK2019错误