簡體   English   中英

在f2py中使用內部可分配數組

[英]Using internal allocatable arrays with f2py

我正在使用f2py包裝一些Fortran子例程。 從Python調用時,我總是對輸入/輸出使用顯式數組,但是有一些需要分配的工作數組。 這些數組與Python沒有接口。 下面顯示了一個復制該問題的小型測試子例程:

subroutine test(n, x, y)

    !f2py intent(in) n, x
    !f2py intent(out) y
    !f2py depend(n) x

    integer, intent(in) :: n, x(n)
    integer, intent(out) :: y

    integer, allocatable :: z(:)

    allocate(z(n))

    z(:) = 10

    y = z(2) + x(1)

end subroutine test

每當我使用內部可分配數組時,使用NumPy的distutils軟件包執行“ python setup.py development”時,都會得到以下輸出:

test.o : error LNK2019: unresolved external symbol _gfortran_runtime_error referenced in function test_
test.o : error LNK2019: unresolved external symbol _gfortran_runtime_error_at referenced in function test_
test.o : error LNK2019: unresolved external symbol _gfortran_os_error referenced in function test_
ASAP\lib\asap_lib.pyd : fatal error LNK1120: 3 unresolved externals

我正在使用numpy.distutils.misc_utl和gfortran 5.2.0,mingw64,Windows 10中的NumPy的Configuration類。

如果我直接使用gfortran,則該程序可以很好地進行編譯,但是當它與f2py(或該過程中的某個位置)連接時,會失敗。 我可以注釋掉分配行並將其編譯,但顯然在運行時不起作用。 無論我有多少可分配數組,總是有3個無法解析的外部變量。

當我在這里時,如果Fortran子例程中包含write或print語句,則會收到類似的鏈接錯誤。 我不需要它們,如果有人有想法,它將僅對調試有用。

謝謝您的幫助。

更新1:

使用numpy.distutils.misc_util中的Configuration類,我添加了一個額外的鏈接選項

config.add_extension('test_lib', sources, extra_link_args=['/FORCE']

在Microsoft鏈接器選項中查看此處的信息后。 '/ FORCE'是關鍵選項。 在Python中,print或write命令仍然返回退出代碼255,但是至少可分配的數組似乎可以正常工作,這是我所關心的。

好像是黑客,但是如果有人知道是什么原因導致了最初的問題,我可能仍然有一個更深層次的問題需要解決。

我遇到了鏈接問題,並在f2py選項中指定了editor = mingw32可以解決所有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM