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'
ada__text_io__put_line__2′
undefined reference to
¿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>
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: