Ошибка сегментации при вызове C из Фортрана

Я пытаюсь вызвать функцию в C из Fortran.
Я не очень хорошо понимаю, как перевести указатель C на типы Fortran.
Может быть, это источник ошибки сегментации.
Ниже мой код.

Является ли мой интерфейс Fortran правильным?
Использует ли моя программа на Фортране правильные типы данных?

Прототип функции C (у меня нет кода)

int __stdcall GRBnewmodel(
    GRBenv *env, 
    GRBmodel **modelP, 
    const char *Pname, 
    int numvars,
    double *obj, 
    double *lb, 
    double *ub, 
    char *vtype, 
    char **varnames
);

Интерфейс Фортран

function GRBnewmodel(env, modelP, Pname, numvars,obj, lb, ub, vtype, varnames) bind(C, name = 'GRBnewmodel' )
    use iso_c_binding
    integer(c_int) :: GRBnewmodel
    type(c_ptr), value :: env
    type(c_ptr) :: modelP
    character(c_char), dimension(*)  :: Pname
    integer(c_int), value :: numvars
    real(8), dimension(*):: obj
    real(8), dimension(*) :: lb
    real(8), dimension(*) :: ub
    character(c_char), dimension(*)  :: vtype
    type(c_ptr) :: varnames ! character**
end function

Программа Фортран

type(c_ptr) :: env = c_null_ptr
type(c_ptr) :: modelP = c_nul_ptr
integer :: error
real(8), dimension(10) :: obj
real(8), dimension(10) :: lb
real(8), dimension(10) :: ub
character(c_char), dimension(10) :: vtype
integer :: i

error = GRBloadenv(env, 'gurobi.log'//c_null_char)

obj = 0
lb = 0
ub = 1
vtype = [ ('C', i=1,10) ]

! segmentation fault is on this line
error = GRBnewmodel( &
    env, &
    modelP, &
    c_null_char, &
    10, &
    obj, &
    lb, &
    ub, &
    vtype, &
    c_null_ptr &
)

Я работаю над MAC Maverick с помощью Gfortran.

1 ответ

Решение

Я нашел правильное соглашение о вызовах.
Я разместил это в этом репозитории github.

Другие вопросы по тегам