Seite 1 von 1

cmake-Projekt: Problem mit C-Library

Verfasst: 4. Januar 2007 16:45
von franzf
Hi

Ich muss für mein Projekt eine C-Library verwenden, der Rest ist C++. Die Gui will ich mit QT bauen.

Jetzt hab ich leider ein Problem mit cmake, bei dem ich nicht weiter komm:

Code: Alles auswählen

make
[ 38%] Built target ephemeris
Linking C executable swetest
CMakeFiles/swetest.dir/swetest.o: In function `main':
swetest.c:(.text+0x23e): undefined reference to `fmod'
swetest.c:(.text+0x295): undefined reference to `fmod'
swetest.c:(.text+0x23ee): undefined reference to `fmod'
swetest.c:(.text+0x2445): undefined reference to `fmod'
CMakeFiles/swetest.dir/swetest.o: In function `print_line':
swetest.c:(.text+0x4e03): undefined reference to `floor'
swetest.c:(.text+0x4e21): undefined reference to `floor'
swetest.c:(.text+0x5675): undefined reference to `sqrt'
swetest.c:(.text+0x579f): undefined reference to `sqrt'
swetest.c:(.text+0x5d49): undefined reference to `sqrt'
swetest.c:(.text+0x5e67): undefined reference to `sqrt'
CMakeFiles/swetest.dir/swetest.o: In function `dms':
swetest.c:(.text+0x661a): undefined reference to `fmod'
CMakeFiles/swetest.dir/swetest.o: In function `do_eclipse_etc':
swetest.c:(.text+0x7317): undefined reference to `fmod'
swetest.c:(.text+0x77fa): undefined reference to `fmod'
swetest.c:(.text+0x7f80): undefined reference to `fmod'
swetest.c:(.text+0x8639): undefined reference to `fmod'
CMakeFiles/swetest.dir/swetest.o:swetest.c:(.text+0x8e9d): more undefined references to `fmod' follow
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `cos'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `sin'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `atan2'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `pow'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `log10'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `tan'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `atan'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `asin'
/home/franz/Programmieren/Horosquope/svn_build/src/sweph/libephemeris.so: undefined reference to `acos'
collect2: ld gab 1 als Ende-Status zurück
make[2]: *** [src/sweph/test/swetest] Fehler 1
make[1]: *** [src/sweph/test/CMakeFiles/swetest.dir/all] Fehler 2
make: *** [all] Fehler 2
Das sind ja alles Funktionen, welche in der math.h definiert werden.
Ohne dem Einsatz von cmake kompiliert alles wunderbar. Wenn ich die resultierende Lib ins Projekt einbinden will (also extern kompiliert->kopiert->target_link_libraries hinzufügen), wird wieder fleißig gemeckert über fehlende fmod, acos, usw.

Bisher hab ich mich drum gedrückt und erst die Gui außenrum gebastelt, doch jetzt gehts nicht mehr ohne.

Kann mir hier irgend wer weiterhelfen? Wäre echt nett :)

Das Projekt gibts per Subversion:

Code: Alles auswählen

svn co https://horosquope.svn.sourceforge.net/svnroot/horosquope horosquope
Die Library liegt in src/sweph, das kleine Testprogramm im dortigen Unterverzeichnis test.

Die Ephimeriden gibts hier (swe_unix_src_1.71.00.tar.gz verwende ich). Ich hab enfach das enthaltene swetest.c kopiert, aber, wie gesagt, es geht nix :(

Grüße
Franz

Verfasst: 4. Januar 2007 19:17
von Christian81
Und was hat das mit Qt Programmierung zu tun???

Dir fehlt die math-lib -> target_add_libraries(myTarget m)
Allerdings ist das nur unter non Windows nötig

Verfasst: 4. Januar 2007 20:05
von franzf
Christian81 hat geschrieben:Und was hat das mit Qt Programmierung zu tun???

Dir fehlt die math-lib -> target_add_libraries(myTarget m)
Allerdings ist das nur unter non Windows nötig
Danke dir! Ich hab dummerweise angenommen, dass die Sachen der stdlib (dazu zähl ich laienhaft einfach mal die libm), automatisch eingebunden werden. Dass dem nicht so ist weiß ich jetzt, für zukünftige Unternehmungen bin ich vorbereitet ;)

Nebenbei: target_add_libraries gibt es nicht, das heißt (zumindest bei mir mit cmake-2.4.5) target_link_libraries, war aber kein Problem.

Und sorry dass ich das hier gepostet hab. Ein deutsches Forum zur Thematik hab ich nicht gefunden (wenn ich auf einem Gebiet neu bin möchte ich erstmal nicht die zusätzliche Hürde einer fremden Sprache auf mich nehmen müssen), und in anderen Foren bezügl. Programmierung werden Threads zu cmake sehr stiefmütterlich behandelt.
Da ich wusste, dass hier jemand (...) mit sehr guten cmake-Kenntnissen sitzt, hab ich in meinem maßlosen Egoismus einfach hier gepostet. ;)
Entschuldigung nochmal...

Besten Dank und Grüße
Franz