Kompilierung in der Konsole geht, in Kdevelop nur Fehler...



  • Hallo, ich beschäftige mich gerade mit dem laden von .so Files unter Linux in C/C++....

    nun habe ich folgendes Beispiel gefunden.

    #include <stdio.h>
    #include <dlfcn.h>
    
    int main(int argc, char **argv) {
        void *handle;
        double (*cosine)(double);
        char *error;
    
        handle = dlopen ("libm.so", RTLD_LAZY);
        if (!handle) {
            fprintf (stderr, "%s\n", dlerror());
            exit(1);
        }
    
        cosine = dlsym(handle, "cos");
        if ((error = dlerror()) != NULL)  {
            fprintf (stderr, "%s\n", error);
            exit(1);
        }
    
        printf ("%f\n", (*cosine)(2.0));
        dlclose(handle);
        return 0;
    }
    

    wenn es das Programm in eine .c Datei speichere und dann folgendes mache

    gcc -rdynamic -o foo foo.c -ldl
    

    kann ich das Programm foo aufrufen und es funktioniert...

    nun wollte ich das alles jedoch nicht in C sondern in Kdevelop mit C++ schreiben.

    1. was muss ich am Quellcode ändern, damit es läuft...
    weil wenn ich nur Copy/Paste mache dann kommen folgende Fehler/Warnungen beim kompilieren....

    in.cpp' || echo './'`main.cpp
    main.cpp: In function `int main(int, char**)':
    main.cpp:46: warning: invalid conversion from `void*' to `double (*)(double)'
    main.cpp:35: warning: unused parameter `int argc'
    main.cpp:35: warning: unused parameter `char**argv'
    
    main.o: In function `main':
    /usr/usr/ready/ben/sofiles/sofiles/main.cpp:40: undefined reference to `dlopen'
    /usr/usr/ready/ben/sofiles/sofiles/main.cpp:42: undefined reference to `dlerror'
    /usr/usr/ready/ben/sofiles/sofiles/main.cpp:46: undefined reference to `dlsym'
    /usr/usr/ready/ben/sofiles/sofiles/main.cpp:47: undefined reference to `dlerror'
    /usr/usr/ready/ben/sofiles/sofiles/main.cpp:53: undefined reference to `dlclose'
    collect2: ld returned 1 exit status
    

    2. welche Compileroptionen muss ich für C++ angeben...

    also wenn ich es dann als Cpp Datei habe , was muss ich als Parameter an g++ anhängen damit er mir das sauber durchcompiliert?

    3. Welche Optionen wären in Kdevelop noch anzuzugeben beim Compiler? und wo genau?? CxxFlags?? CppFlags???

    mfg

    UFOSWORLD



  • Die Optionen die du angibst, wenn du auf der Konsole kompilierst musst du natürlich auch bei KDevelop angeben. Das hat ja keine Glaskugel installiert, mit der es deine Gedanken lesen kann.

    Die Optionen gibt man unter den "Projekt Einstellungen" an. (Linkeroptionen eben unter Linkeroptionen und Compiler-Optionen eben unter Compiler-Optionen)



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Zum linken von libraries:
    Wenn du ein automake Projekt hast, im Automake Manager auf das target (Program in bin) rechtsklicken -> Options -> Libraries



  • THX 1138 schrieb:

    Zum linken von libraries:
    Wenn du ein automake Projekt hast, im Automake Manager auf das target (Program in bin) rechtsklicken -> Options -> Libraries

    Ziel des Projektes ist es ja gerade nicht die Libs schon beim kompilieren anzugeben, sondern diese während der Laufzeit dynamisch zu laden.... da sie sich dann im entgültigen Projekt ändern werden, und ich den Namen der lib aus einer config file auslesen werde.....



  • ich ging davon

    -ldl
    

    aus



  • THX 1138 schrieb:

    ich ging davon

    -ldl
    

    aus

    naja das war halt das command das da bei dem beispiel mit dran gehangen hat...

    wie würdest du das dann anstellen?? bzw mit welchen Parametern würdest du es kompilieren das keine fehler mehr kommen und er das dlerror und co verarbeiten kann...?



  • Hat keiner von euch ein Beispiel in C++ unter Linux??? 😞

    Is wirklich sehr dringend!!! 😮

    grüsse UFO 🙂



  • ufo du bist lustig
    -ldl hast eh schon erklaehrt bekommen
    wuerd ich also nehem



  • oki

    und wo muss ich das -ldl einfügen...??

    bei projekt unter einstellungen und dann??

    hab leider grad kein kdevelop da... deswegen die frage...



  • THX 1138 schrieb:

    Zum linken von libraries:
    Wenn du ein automake Projekt hast, im Automake Manager auf das target (Program in bin) rechtsklicken -> Options -> Libraries

    und dann Add



  • ok danke hatte es mittlerweile selbst gefunden... und es funkioniert jetzt alles...

    danke nochmal

    grüsse ufo


Log in to reply