Como criar um ada lib.a e vincular a C
Estou tentando criar uma biblioteca ada e tentei algumas coisas diferentes. Eu tentei compilar o projeto usando makefiles e tentando criar uma biblioteca a partir de todos os arquivos .o Isso parecia não funcionar como esperado. Em seguida, solicitei suporte ao adacore e eles me indicaram a direção do uso de arquivos .gpr nos projetos ada e c e no ada.gpr que deve criar uma biblioteca. Isso quase funcionou, mas quando ele tenta compilar o ada, recebo referências indefinidas.
O que eu tentei: Linha de comando:
ar rc libmy_lib.a *.o
e quando eu tento ler o que está na lib
ld libmy_lib.a
Eu recebo este erro ld: aviso: não é possível encontrar o símbolo de entrada _start; não definindo endereço inicial
Arquivos de projeto: Meu arquivo de projeto ada prj.gpr
project Prj is
for Source_Dirs use ("source1/", "source2", ....);
for Object_Dir use ".";
for Languages use ("Ada");
for Library_Name use "test";
for Library_Dir use "lib";
for Library_Interface use (
--All my ada packages
);
package Naming is
for Spec_Suffix ("ada") use ".1.ada";
for Body_Suffix ("ada") use ".2.ada";
for Separate_Suffix use ".2.ada";
for Dot_Replacement use ".";
end Naming;
package Compiler is
for Default_Switches ("ada") use ("-v", "-g", "-gnato", "-gnatwa", "-gnatQ", "-gnat05");
end Compiler;
package Builder is
for Global_Compilation_Switches ("Ada") use ("-gnat95");
end Builder;
package Ide is
end Ide;
end Prj;
Meu arquivo de projeto c c_main.gpr
with "prj.gpr";
project C_Main is
for Source_Dirs use ("source_c_1/", "source_c_2/");
for Languages use ("C");
for Main use ("source_c_1/main.c");
end C_Main;
Quando executo o comando gprbuild c_main.gpr
Eu recebi 2 erros diferentes: primeiro sendo referências indefinidas para alguns pacotes que fazem parte do meu código ada e que, nos arquivos gnat .adb, eu não sabia que existiam. Biblioteca tão quebrada que eu acho. Segundo: os campos de certos pacotes não podem ser encontrados / não existem, mesmo que o código seja compilado e executado. Isso me dá erros informando que os campos não existem no código ada.
TLDR: Eu tenho um projeto ada em 3 diretórios diferentes e quero criar uma biblioteca a partir deles. Em seguida, vincule a um programa de teste C. Por fim, só tenho que entregar o arquivo da biblioteca. Linha de comando seria melhor. Eu não quero lidar com arquivos de projeto.