我在包裝一些Fortran子程序以用於python3腳本時遇到了一個問題。自從我試圖在子例程中使用OpenMP後,此問題纔出現。用OpenMP編譯的f2py模塊的Python導入錯誤
例如,如果我使用f2py -c -m --fcompiler=gfortran --compiler=mingw32 --f90flags='-fopenmp' test test.f90 -lgomp
編譯模塊'test.pyd',其中'test.f90'是包含並行循環的Fortran子例程,試圖將此模塊導入到我的腳本中時,遇到ImportError: DLL load failed: A dynamic link library (DLL) initialization routine failed.
。
刪除編譯中的-fopenmp
標誌或Fortran子例程中的!$omp
註釋刪除此錯誤。
將子例程更改爲大致等效的Fortran程序,該程序編譯爲.exe並且並行運行正確。
我是Windows 10平臺上,與AMD64處理器,採用GNU Fortran和C編譯器從TDM-GCC
謝謝您的回覆!我在我的PATH中包含了'C:\ TDM-GCC-64 \ bin',其中包括C和Fortran編譯器以及'libgomp-1.dll'。 最初我從iPython控制檯(使用Anaconda3)運行腳本,但是爲了簡化問題,我只是嘗試打開一個Python3控制檯,並輸入'import test',達到相同的效果(將.pyd文件添加到當然是正確的目錄) –
如果你在你的腳本所在的目錄中打開一個常規的'cmd'控制檯,然後運行'python your_script.py'?它會產生相同的錯誤嗎? (不是用anaconda python控制檯)。水蟒可能會混淆你的PATH。 – Thundzz
不幸的是,我在Python 3.6.0中遇到了同樣的錯誤。我已經從系統PATH中刪除了Anaconda3,並且在編譯時沒有OpenMP標誌,模塊成功導入,並且當我重新引入該標誌時,出現原始錯誤。 我剛纔已經進入一個'cmd'控制檯,將兩個.pyd文件輸入我Python36文件夾後: '進口numpy' '進口omp_test_mod' 最後一行後,將出現錯誤 '進口test_mod'像之前一樣。鍵入'libgomp-1.dll'表明它確實在PATH中。 –