Problem GNU libmatheval in c++



  • Hallo!

    für ein Funktionsparser habe ich im Internet nach einer Bibliothek gesucht, die der eingegebenen mathematischen Funktionen für spezifizierte variable Werte auswerten kann und ich bin auf GNU Libmatheval gestoßen. ihre Funktionen könnte ich für mein Programm in C ohne Probleme verwenden ; und jetzt versuche ich seit 3 tage das Programm in C++ umzuschreiben damit ich die Funktionswerte mit Qt plotten kann hier ist das code :

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cassert>
    #include <matheval.h>
    
    #define BUFFER_SIZE 256
    #define MAX 20
    #define pi 3.1415
    
    using namespace std;
    
    int main( int argc, char *argv[])
    {
    char buffer[BUFFER_SIZE];
    int length;
    void *f;
    char **names;
    int count;
    double x[MAX];
    int j;
    cout <<"f(x_f) = ";
    cin.getline(buffer, BUFFER_SIZE);
    length = strlen (buffer);
    if (length > 0 && buffer[length - 1] == '\n')
    buffer[length - 1] = '\0';
    
    f = evaluator_create (buffer);
    assert (f);
    evaluator_get_variables (f,&names, &count);
    cout <<" " ;
    for (j = 0; j < count; j++)
    // printf ("%s ", names[j]);
    cout <<'\n';
    
    for(j=0;j<=MAX-1;j++){
    x[j]=(pi/MAX)*j;
    x[j]=evaluator_evaluate_x (f, x[j]);
    cout << x[j];
    }
    evaluator_destroy (f);
    exit (EXIT_SUCCESS);
    }
    

    der Compiler meldet mir díe folgenden Fehler:

    evaluator.cpp:(.text+0xa9): undefined reference to `evaluator_create'
    evaluator.cpp:(.text+0x103): undefined reference to `evaluator_get_variables'
    evaluator.cpp:(.text+0x1a1): undefined reference to `evaluator_evaluate_x'
    evaluator.cpp:(.text+0x1e6): undefined reference to `evaluator_destroy'
    collect2: ld returned 1 exit status
    

    hat jemand da eine Idee oder kennt Ihr einer andere Library die so ähnliches unter C++ kann.

    Danke Schonmal im Voraus

    Gruß
    Labin

    /edit pumuckl: code-Tags



  • Code-Tags...



  • Zum Einen ist das kein Compilerfehler sondern ein Linkerfehler. In der FAQ gibts mindestens einen Eintrag, was der bedeutet, alternativ gibts auch eine Forensuche.

    Zu deinem C-Stil (C++-Stil mag ich es nicht nennen) möge jemand anderes was schreiben, ich hab nicht genug Zeit weil ich in ner halben Stunde zur Bahn muss 😉



  • Danke sehr pumuckl für Ihre Tipps



  • ich habe es zu dem Code zugefügt aber es funktioniert immer noch nicht :
    [/code]
    extern "C" {
    #include <matheval.h>
    }

    using namespace std;

    extern "C" {
    void *evaluator_create (char *string);
    void evaluator_destroy (void *evaluator);
    void evaluator_get_variables (void *evaluator, char ***names, int *count);
    double evaluator_evaluate_x (void *evaluator, double x);

    }

    int main( int argc, char *argv[])
    {
    [code]
    habe immer die gleiche Linkerfehler ...



  • 3-Sterne Programmierer 😃



  • labin2011 schrieb:

    Danke sehr pumuckl für Ihre Tipps

    Bitte - hier im Forum duzen wir uns wie allgemein im Netz. Wenn ich online gesiezt werde komme ich mir immer so angestaubt vor 😉

    Das "extern C" ist hier fehl am Platz. Der Code sollte funktionieren, es muss vermutlich lediglich dem Linker beigebracht werden, dass er die Bibliothek mit zum Programm linken muss, das weiß er nicht automatisch. Je nach Compiler/IDE ist das unterschiedlich zu regeln, eine entsprechende Suche sollte aber schnell zu Ergebnissen führen.


Log in to reply