Связать math.h с gprbuild

#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;