2012-03-18 79 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