[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.cppzu 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 statusAlso 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.cppOkay, 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 probierg++ -Wall -I/usr/local/include -c rootFinding.cppund es funktioniert trotzdem!

Wieso das das?
Auf jeden Fall habe ich jetzt eine Datei namens
rootFinding.ovorliegen.
Scheint also bisher zu funktionieren.
Jetzt muss ich scheinbar anhand des nächsten Abschnitts der Anleitung die Bibliothek noch einbinden.
In meinem Fall probiere ichg++ -L/usr/local/lib rootFinding.o -lgsl -lgslcblas -lmEs kommt wieder was bei rum, jetzt habe ich immernoch eine Datei namens
a.outAber 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ührendu hast keinen namen mitgegeben.
(hier ist die auseinandersetzung mit dem linker :))
-
Hi,
[quote="elise"]schreib dochmal
./a.out //zum ausführenTatsache, 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.0005666Ich 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 habeng++ -L/usr/local/lib -o rootFinding rootFinding.o -lgsl -lgslcblas -lmImmerhin habe ich keine a.out Datei, sondern eine rootFinding!

Gruß,
Klaus.