#gcc #ada #gprbuild
#gcc #ada #gprbuild
Вопрос:
Я пытаюсь создать приложение Ada, которое вызывает C-код. В коде C используется функция sqrt
из math.h
. Если я удалю вызов sqrt
, компиляция и компоновка будут работать отлично. Когда я пытаюсь выполнить sqrt
вызов, компоновщик сообщает мне undefined reference to sqrt
.
Это мой файл gpr:
project Struct_Interfacing is
for Languages use ("Ada", "C");
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Exec_Dir use ".";
for Main use ("struct_interfacing.adb");
package Compiler is
C_Switches := ("-pedantic", "-Wall", "-Werror");
for Default_Switches("C") use C_Switches;
end Compiler;
package Linker is
for Default_Switches("C") use ("-lm");
end Linker;
end Struct_Interfacing;
Я думал, что решение будет for Default_Switches("C") use ("-lm");
таким, но оно все равно не работает.
Ответ №1:
Ваша основная программа находится в Ada, поэтому вы должны указать своему компилятору связать Ada с -lm
, даже если вызов выполняется из C:
package Linker is
for Default_Switches("Ada") use ("-lm");
end Linker;