[linker error] undefined reference to 'mcount'
-
hallo leute, ich habe zwei probleme:
ich habe eine static library(.a) angelegt und sie mittlerweile auf eine sehr simple klasse reduziert, die nur zwei ints speichert, die per constructor gesetzt werden.
Ein Testprogram bindet die bibliothek ein und soll einfach nur ein Object dieser klasse erzeugen. Jetzt passiert folgendes:1.) beim linken bekomme ich oben genannten Fehler und ich habe definitiv kein mcount in meinem Programm!!!
ich habe mal meine gesammten c-ordner nach mcount gescannt, und bemerkt, daß dieses in allen exe dateien die ich jemals gelinkt habe enthalten ist(irgendwo zw den hieroglyphen steht dann "###mcount.c#####")und auch in anderen exe, außerdem gibt es eine ..\dev-cpp\includes\profile.h die eine funktion mcount hat. Vielleicht kann mir jemand erklären, was hier genau passiert, denn in den üblich tutorials und sites steht darüber nichts.
Umgangen habe ich den linker error indem ich einfach ein int mcount definiert habe, aber das kann doch nicht richtig sein, oder? ich denke eher daß das auf den zweiten fehler führt:2.) wenn ich nun mein testprogramm starte bekomme ich einen segmentation fault an der stelle an der ich das object erzeuge.
Nun stellt sich mir die Frage, ob man überhaupt klassen in static libs packen kann. In so ziemlich allen tutorials wird behauptet das sei ganz einfach. was kann ich falsch gemacht haben? die klasse ist einwandfrei, habe sie ausserhalb der lib getestet und nun macht sie ja nicht mehr viel. dennoch segmentation fault.ich nutze: win xp, dev-cpp 4.9.9.1, mingw32-gcc-3.4.2 compiler
danke schonmal
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ 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.
-
zu 1.)
Kann mich dunkel erinnern, dass ich das Problem mit mcount auch mal hatte. mcount hat afaik etwas mit dem Profiling der Anwendung zu tun. Ich kann dir zwar nicht mehr genau sagen, was ich damals gemacht habe. Du solltest aber darauf achten, dass deine Bibliothek und deine Anwendung mit den gleichen Profiling und Debugging Optionen kompiliert werden. Profiling würde ich auf jeden Fall erstmal abschalten. Und wirklich mal genau beobachten, was der Compiler für Optionen beim Übersetzen mitbekommt.zu 2.)
War bei mir so, dass dies eine Folge aus den Problemen von 1.) war.
-
Danke für die Antwort,
habs mittlerweile endlich im Griff,
bin zu den selben Schlußfolgerungen gekommen wie du.
Verwirrend war am Anfang nur daß man so ne Meldung sonst nur bekommt, wenn statics... nicht definiert sind, deshalb hatte ich zuerst am vollkommen falschen ende nach fehlern gesucht.Was mir aufgefallen ist, zum thema profiling, ist ne ungereimtheit in dev-cpp an sich(ohne die hätte es das prob nich gegeben):
Wenn man nen Compiler mit bestimmten einstellungen definiert und den dann in nem Projekt verwendet, und dann in den Projekteinstellungen des Projektes andere Einstellungen nimmt, gelten trotzdem die Einstellungen des definierten Compilers, nicht die Projektmodifikationen. Ich hatte nämlich die Profiling einstellungen im Compiler noch auf Profiling on, im Projekt aber aus, dennoch, erst als ich nach stundenlangem rumprobieren, zufällig einen neuen Compiler definiert hatte(da hab ich dann aufs profiling geachtet), ging es.Kann natürlich sein, daß es noch an was anderem lag,
gruß
-
Zum Thema Dev-C++, die IDE ist hier bei vielen recht unbeliebt. Und das aus gutem Grund, imo. Es gibt einfach immer wieder Probleme, die recht nervig und zeitraubend sind. Und die IDE wird wohl auch nicht mehr weiterentwickelt, afaik. Falls du irgendwann mal eine Alternative brauchst, kann ich Code::Blocks nur empfehlen. Das Projekt ist zwar noch nicht so alt, aber jetzt bereits deutlich besser. Allerdings sollte man nicht die letzte offizielle Version downloaden, da diese bereits mehr als ein Jahr alt ist. Die Anwendung wurde seitdem weitestgehend redesigned, und daher sollte man einen Nightly Build downloaden, der immer aktuell ist. Lief bei mir bisher eigentlich immer stabil, auch wenn es keine offiziellen Releases sind.
-
Ok Code::Blocks hat mich auf anhieb überzeugt, sehr schöne ide(habe den neusten nightly build und minGW 5.0.3).
Ein Problem hab ich nun allerdings damit:
In meinem Projekt verwende ich eine eigene static library, welche wiederum SDL verwendet.
habe SDL, SDL_ttf, und SDL_image gelinkt(also alle ordner und so richtig gesetzt)
trotzdem bekomm ich undefined references meldungen alle wegen SDL: nur ein bsp:
..\gPack/libgPack01.a(gText.o)(.text+0x12e):gText.cpp: undefined reference toSDL_FillRect' ..\\gPack/libgPack01.a(gText.o)(.text+0x198):gText.cpp: undefined reference to
SDL_FreeSurface'
..
wenn ich zum beispiel die static lib selbst builde mit den gleichen linker einstellungen kein problem,
was mache ich falsch?
gruß
-
ok problem gelöst, wens interessiert:
in code::blocks linkt man SDL ohne die linkeroption -lSDL, sondern einfach nur indem "SDL" unter Link Libraries beifügt!