1

我用 python 和 f2py 编写了一些代码,主要使用 linux。这一切都很好,但现在我想与 Windows 用户分享它,所以我正在尝试制作一个可分发给不一定有 gfortran 或 gcc 的用户的模块。我可以访问 windows xp 盒子,正在使用 mingw 和 gfortran。我可以在该机器上编译和使用该模块,但在其他机器上创建的 pyd 似乎需要 dll 的 libgcc 和 libgfortran。这是来自http://www.scipy.org/F2PY_Windows的示例:

subroutine hello ()
   write(*,*)'Hello from Fortran90!!!'
end subroutine hello

编译

python c:\path\to\python\scripts\f2py.py -c \
       --fcompiler=gnu95 --compiler=mingw32 \
        -lmsvcr71 -m foo foo.f90

这在我编译它的机器上按预期工作,但如果我将它复制到另一台机器,我会得到

DLL load failed: The specified module could not be found.

使用依赖walker,我发现它找不到libgcc_s_dw2-1.dll 和libgfortran-3.dll 的dll。是否可以在不假设用户拥有 gcc 和 gfortran 的情况下创建一个我可以分发的 pyd?我在两台机器上都使用 python2.7,都是 32 位的。一个是xp,另一个是windows 7。

4

1 回答 1

1

作为在包中包含libgcclibgfortrandll 的替代方案,应该可以链接这些库的静态版本,前提是它们在您的 MinGW 构建中可用。(至少,我认为是。我没有使用 Python 或 pyds 的经验,但对于常规的可执行文件和 dll 来说是可能的。)

查看-static链接选项,或者如果您需要更多控制-static-libgcc-static-libgfortran.

于 2012-03-21T13:00:06.000 回答