[gelöst] GSL Datei kompilieren



  • Hallo ihr Lieben,

    ich versuche gerade die GSL für meine Numerik zu verwenden und kriege das ganze leider nicht kompiliert.

    Zunächst hatte ich meine Datei rootFinding.cpp versucht einfach mittels

    g++ -Wall -pedantic -ansi -o rootFinding rootFinding.cpp
    

    zu kompilieren.

    Das ergabe eine ganze Menge Fehlermeldungen:

    /tmp/ccZP6usw.o: In function `main':
    rootFinding.cpp:(.text+0xcf): undefined reference to `gsl_root_fsolver_brent'
    rootFinding.cpp:(.text+0xdf): undefined reference to `gsl_root_fsolver_alloc'
    rootFinding.cpp:(.text+0x100): undefined reference to `gsl_root_fsolver_set'
    rootFinding.cpp:(.text+0x10c): undefined reference to `gsl_root_fsolver_name'
    rootFinding.cpp:(.text+0x160): undefined reference to `gsl_root_fsolver_iterate'
    rootFinding.cpp:(.text+0x16f): undefined reference to `gsl_root_fsolver_root'
    rootFinding.cpp:(.text+0x180): undefined reference to `gsl_root_fsolver_x_lower'
    rootFinding.cpp:(.text+0x191): undefined reference to `gsl_root_fsolver_x_upper'
    rootFinding.cpp:(.text+0x1b5): undefined reference to `gsl_root_test_interval'
    rootFinding.cpp:(.text+0x241): undefined reference to `gsl_root_fsolver_free'
    collect2: ld returned 1 exit status
    

    Also habe ich die erste Zeile bei google eingegeben, sodass ich recht schnell hier gelandet bin.

    Okay, also zurück ins Manual und schauen wie das ganze richtigtm geht.

    Das führte mich sehr schnell zu dem Abschnitt über Linkin and Compiling, d.h. ich versuche mein Programm zunächst ohne linken zu kompilieren:

    g++ -Wall -I/usr/local/include/gsl -c rootFinding.cpp
    

    Okay, im Manual wird gcc verwendet, ich nehme g++, z.B. laut Stack Overflow der Unterschied zwischen C und C++ ist. Ich hoffe, dass darin nicht das Problem liegt.

    Weiterhin fällt mir auf, dass im Manual die der volle Verzeichnispfad genommen wird, sondern lediglich*-I/usr/local/include*. In das Unterverzeichnis der gsl wird also gar nicht mehr reingeschaut.
    Ich habe sofort auch diesen Befehl probier

    g++ -Wall -I/usr/local/include -c rootFinding.cpp
    

    und es funktioniert trotzdem! 😮

    Wieso das das?

    Auf jeden Fall habe ich jetzt eine Datei namens

    rootFinding.o
    

    vorliegen.

    Scheint also bisher zu funktionieren.

    Jetzt muss ich scheinbar anhand des nächsten Abschnitts der Anleitung die Bibliothek noch einbinden.
    In meinem Fall probiere ich

    g++ -L/usr/local/lib rootFinding.o -lgsl -lgslcblas -lm
    

    Es kommt wieder was bei rum, jetzt habe ich immernoch eine Datei namens

    a.out
    

    Aber immernoch keine ausführbare rootFinding Datei? Bin ich noch nicht vollständig am Ziel oder mache ich was falsch?

    Vielen Danke im Voraus.

    Gruß,
    Klaus.



  • schreib dochmal

    ./a.out //zum ausführen
    

    du hast keinen namen mitgegeben.

    (hier ist die auseinandersetzung mit dem linker :))



  • Hi,

    [quote="elise"]schreib dochmal

    ./a.out //zum ausführen
    

    Tatsache, es funktioniert. Da kommt dann eben

    using brent method
     iter [    lower,     upper]      root        err  err(est)
        1 [1.0000000, 5.0000000] 1.0000000 -1.2360680 4.0000000
        2 [1.0000000, 3.0000000] 3.0000000 +0.7639320 2.0000000
        3 [2.0000000, 3.0000000] 2.0000000 -0.2360680 1.0000000
        4 [2.2000000, 3.0000000] 2.2000000 -0.0360680 0.8000000
        5 [2.2000000, 2.2366300] 2.2366300 +0.0005621 0.0366300
    Converged:
        6 [2.2360634, 2.2366300] 2.2360634 -0.0000046 0.0005666
    

    Ich versuche mich an der numerischen Nullstellensuche. 😉

    du hast keinen namen mitgegeben.

    Und an welcher Stelle muss das rein? Ersten oder zweiten Befehl? Also gerade noch die Option -o <NAME>, darüber reden wir doch - oder?

    EDIT:
    Also ich habe es mal mit dem zweiten Befehl probiert, das scheint funktioniert zu haben

    g++ -L/usr/local/lib -o rootFinding rootFinding.o -lgsl -lgslcblas -lm
    

    Immerhin habe ich keine a.out Datei, sondern eine rootFinding! 🙂

    Gruß,
    Klaus.


Anmelden zum Antworten