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.

Crear una biblioteca Ada estática que pueda ser enlazada sin el uso de las gnat-tools.

Quiero crear una biblioteca estática a partir de código Ada y distribuirla a los desarrolladores sin la herramienta GNAT (para código C/C++).

Obtendré los siguientes errores de enlaceador cuando intente enlazar la biblioteca Ada (‘.a’) con un programa en C:

undefined reference to __gnat_rcheck_CE_Overflow_Check'
undefined reference to
ada__text_io__put_line__2′

¿Cómo puedo lograr esto? Parece que debo vincular con la biblioteca de tiempo de ejecución, pero ¿cómo?

Código de prueba:

main.c:

#include <stdio.h>

extern void adaTest();
extern int add5(int);

int main(){
  adaTest();
  int b = add5(2);
  printf("--> %d \ndone.\n", b);
  return 0;
}

ada_lib_project.gpr:

library project adalibproject is
for Languages use (“Ada”);
for LibraryName use “MyAdaLib”;
for LibraryDir use “mygeneratedlib”;
for LibraryKind use “Static”;
end adalibproject;

adatestpacket.ads:

with Interfaces.C; use Interfaces.C;
package adatestpacket is
procedure adatest with
Export, Convention => C, ExternalName => “adaTest”;

function add5(x: in int) return int with
Export, Convention => C, ExternalName => “add5”;
end adatestpacket;

adatestpacket.adb:

with Ada.TextIO; use Ada.TextIO;
with Interfaces.C; use Interfaces.C;
package body adatestpacket is
procedure adatest is
begin
PutLine(“Esto es código ejecutado en ADA/SPARK…”);
null;
end adatest;

function add5(x: in int) return int is
begin
return x + 5;
end add5;
end adatestpacket;
“`

Compilación:

gcc -c main.c -o main.o # .c -> .o
gprbuild -P ada_lib_project.gpr # .ad[sb] -> .a
gcc main.o -L my_generated_lib -l My_Ada_Lib -o a.out # Enlazando, con referencias indefinidas.</stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución:

    Es necesario utilizar la Biblioteca de Tiempo de Ejecución GNAT (libgnat.a) al enlazar su biblioteca Ada con un programa en C.

    Compilación:

    gcc -c main.c -o main.o           # .c -> .o
    gprbuild -P ada_lib_project.gpr   # .ad[sb] -> .a
    gcc main.o -L my_generated_lib -l My_Ada_Lib -lgnat -o a.out # Enlazando -- con la Biblioteca de Tiempo de Ejecución GNAT
    

Comments are closed.