I want to integrate my Ada static library (libnewapi.a) with my C source code (main.c). I do not have any issues generating the static library but when trying to link it with main.c. I get the below link error, libnewapi.a(unit1.o):unit1.adb:(.text+0x31): undefined reference to `__gnat_rcheck_CE_Overflow_Check' I am not using this reference in my main.c not in any of my Ada files. I do not know why this reference was added automatically. It is crucial that I need to link my main.c using a static Ada library for my project. I do not know where I am going wrong. Help is much appreciated. Thanks!
I am generating libnewapi.a using a GPR as below,
-- ada_gen_a.gpr
project ada_gen_a is
for Languages use ("Ada");
for Source_Dirs use ("./");
for Library_Name use "newapi";
for Library_Dir use "./Lib/";
for Library_Kind use "static";
package Naming is
for Spec_Suffix ("ada") use ".ads";
for Body_Suffix ("ada") use ".adb";
for Separate_Suffix use ".adb";
for Dot_Replacement use ".";
for Casing use "mixedcase";
end Naming;
Ada_Switches := ("-gnato", "-O2");
package Compiler is
for Default_Switches ("ada") use Ada_Switches;
end Compiler;
package Binder is
for Default_Switches ("Ada") use ("-n","-Lada");
end Binder;
end ada_gen_a;
Ada Sourcefiles:
-- unit1.ads
package Unit1 is
function Add (A, B : Integer) return Integer;
pragma Export (C, Add, "ada_add");
end Unit1;
-- unit1.adb
package body Unit1 is
function Add (A, B : Integer) return Integer is
begin
return A + B;
end Add;
end Unit1;
C Source File:
/* main.c */
#include <stdio.h>
extern void ada_add (void);
int main (int argc, char *argv[])
{
int a = 21, b = 7, c = 0;
printf ("%d", a);
printf ("%d", b);
c = ada_add(a,b);
printf ("%d", c);
return 0;
}
I am using the below GPR to link the above main.c with the Ada static library generated using ada_gen_a.gpr.
-- Ada_Use_A.gpr
with "newapi.gpr";
project Ada_Use_A is
for Languages use ("C");
for Source_Dirs use (".");
for Source_Files use ("main.c");
package Naming is
for Casing use "mixedcase";
end Naming;
Ada_Switches := ("-gnato", "-O2");
package Compiler is
for Default_Switches ("C") use ("-O2", "-Wall");
for Default_Switches ("Ada") use Ada_Switches;
end Compiler;
package Binder is
for Default_Switches ("Ada") use ("-n","-Lada");
end Binder;
for Main use ("main.c");
end Ada_Use_A;
-- newapi.gpr
project newapi is
for Externally_Built use "true";
for Source_Files use ();
for Library_Dir use ".\lib\";
for Library_Name use "newapi";
for Library_Kind use "static";
end newapi;
When I try to build the Ada_Use_A.gpr GPS I get the below linker error,
libnewapi.a(unit1.o):unit1.adb:(.text+0x31): undefined reference to
__gnat_rcheck_CE_Overflow_Check'
gprbuild: link of main.c failed`