es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al llamar a la función de la biblioteca compartida de C desde Intel Fortran que recibe un entero.

Estoy intentando ejecutar una función en C desde una biblioteca compartida de Linux (.so) desde Fortran. La función en C recibe un número entero del programa Fortran. No estoy obteniendo un valor erróneo en C al usar el compilador Intel (2021.3.0), pero gfortran funciona sin problemas. Parece haber un error de tipo que no puedo identificar. Estoy creando una interfaz abstracta siguiendo la sintaxis de interoperabilidad establecida aquí.

Función en C:

int print_number(int n)
{
printf(“Hola mundo! %d\n”, n);
return 0;
}​

Función en Fortran:

! Interfaz con biblioteca compartida
interfaz abstracta
!% ——————————————————————————-
!% Simulación
!% ——————————————————————————-
función entera print_number(número)
usar, intrínseco :: iso_c_binding
implícito ninguno
entero(c_int), valor :: número
end función print_number
end interface

La salida al llamar a print_number(2):

Hola mundo! 734920112

Adjunto los archivos para reproducir el error aquí. Primero, ejecuta ./compile.sh, luego ./run_test

Apreciaría mucho si alguien pudiera señalar lo que estoy haciendo mal.

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Estoy intentando ejecutar una función C desde una biblioteca compartida de Linux (.so) desde Fortran. La función en C recibe un número entero del programa Fortran. No obtengo un valor erróneo en C al usar el compilador de Intel (2021.3.0), pero gfortran funciona sin problemas. Parece que hay un error de tipo que no puedo identificar. Estoy creando una interfaz abstracta siguiendo la sintaxis de interoperabilidad establecida aquí.

    Función en C:

    int print_number(int n)
    {
        printf("Hello world! %d\n", n);
        return 0;
    }
    

    Función en 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
    

    La salida al llamar print_number(2):

    Hello world! 734920112
    

    Adjunto los archivos para reproducir el error aquí. Primero, ejecute ./compile.sh, luego ./run_test. Agradecería mucho si alguien pudiera señalar lo que estoy haciendo mal.

Comments are closed.