2012-03-18 50 views
1

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

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,我发现它找不到dll的libgcc_s_dw2-1.dll和libgfortran-3.dll。是否有可能创建一个我可以在不假设用户拥有gcc和gfortran的情况下分发的pyd?我在两台机器上都使用python2.7,都是32位。一个是XP,其他窗口7.

+0

为什么不重新分配mingw的libgcc_s_dw2-1.dll和libgfortran-3.dll与pyd? – cgohlke 2012-03-18 08:22:31

+0

那么,最终我想使用setup.py来为模块构建一个二进制文件。我不知道如何将dll添加到二进制文件中。 – rjad 2012-03-18 10:55:27

+0

使用distutils package_data或data_files(http://docs.python.org/distutils/setupscript.html) – cgohlke 2012-03-18 17:04:09

回答

1

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

看那-static选项链接,或者如果你需要更多的控制-static-libgcc-static-libgfortran

+0

这是我成功的方法。 MinGW gcc(with gfortran)默认使用共享库。 – tharen 2012-10-26 08:13:28