我正在嘗試從 Fortran 的 Linux 共享庫 (.so) 運行 C 函式。C 中的函式從 Fortran 程式接收一個整數。使用 intel 編譯器 (2021.3.0) 時,我沒有在 C 中得到錯誤值,但 gfortran 可以正常作業。似乎存在我無法識別的型別錯誤。我正在按照此處建立的互操作性語法創建一個抽象介面
C 中的函式:
int print_number(int n)
{
printf("Hello world! %d\n", n);
return 0;
}?
Fortran 中的函式
! Interface with shared library
abstract interface
!% -------------------------------------------------------------------------------
!% Simulation
!% -------------------------------------------------------------------------------
integer function print_number(number)
use, intrinsic :: iso_c_binding
implicit none
integer(c_int), value :: number
end function print_number
end interface
呼叫 print_number(2) 時的輸出:
你好,世界!734920112
我附上檔案以在此處重現錯誤。首先執行./compile.sh,然后./run_test
如果有人能指出我做錯了什么,我將不勝感激。
謝謝!
uj5u.com熱心網友回復:
您不應該為此使用抽象介面,但問題可能來自不使用bind(C).
不使用bind(C)英特爾 Fortran 編譯函式以期待一個指標(指向某物的副本)。要使其期望值,請同時使用value和bind(C)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360744.html
標籤:C linux 复式 共享库 英特尔-fortran
上一篇:從遠程服務器獲取多個最新檔案
