Linker friert ein
-
- Beiträge: 98
- Registriert: Di 15. Nov 2011, 11:36
Linker friert ein
Hey,
ich hab ein seltsames Problem, bei dem ich nicht weiter weiß. Ich hab verschiedene Units, die ich in verschiedenen Projekten nutze. Diese Units nutzen eine Unit "uGlobal". "uGlobal" wird in jedem Projekt seperat angelegt und enthält eine Methode um Log-Einträge zu schreiben. Je nach Anwendungstyp wird das Log in eine Datei, in die Konsole oder in eine ListBox oder ähnliches geschrieben. Das hat bis jetzt auch super funktioniert. Heute hab ich ein neues Projekt angefangen wo ich auch die besagten Units nutze. Das Projekt is ein Konsolenprojekt. Sobald ich eine Unit "uGlobal" erstelle die eine einzige leere Methode "LogMsg(const aMsg: String)" erstelle, hängt sich der Linker beim kompilieren auf :/ Ich hab das Ganze auch mit einem komplett neuen Konsolen-Projekt versucht: gleiches Ergebnis. Mit normalen Anwendungen mit grafischer Oberfläche funktioniert alles 1a. LCL ist aber auch in das Konsolenprojekt eingebunden, da ich da einige Klassen nutze. Hat jmd ne Idee wo da der Fehler ist?
MfG Bergmann.
ich hab ein seltsames Problem, bei dem ich nicht weiter weiß. Ich hab verschiedene Units, die ich in verschiedenen Projekten nutze. Diese Units nutzen eine Unit "uGlobal". "uGlobal" wird in jedem Projekt seperat angelegt und enthält eine Methode um Log-Einträge zu schreiben. Je nach Anwendungstyp wird das Log in eine Datei, in die Konsole oder in eine ListBox oder ähnliches geschrieben. Das hat bis jetzt auch super funktioniert. Heute hab ich ein neues Projekt angefangen wo ich auch die besagten Units nutze. Das Projekt is ein Konsolenprojekt. Sobald ich eine Unit "uGlobal" erstelle die eine einzige leere Methode "LogMsg(const aMsg: String)" erstelle, hängt sich der Linker beim kompilieren auf :/ Ich hab das Ganze auch mit einem komplett neuen Konsolen-Projekt versucht: gleiches Ergebnis. Mit normalen Anwendungen mit grafischer Oberfläche funktioniert alles 1a. LCL ist aber auch in das Konsolenprojekt eingebunden, da ich da einige Klassen nutze. Hat jmd ne Idee wo da der Fehler ist?
MfG Bergmann.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Linker friert ein
Leider nicht.Bergmann89 hat geschrieben:Hat jmd ne Idee wo da der Fehler ist?
Es gibt bessere Vorgehensweisen: du erstellt in Lazarus ein Package mit all deinen projektunabhängigen Units. Dort erstellst du auch eine Unit uGlobal. Diese enthält jedoch eine Variable, in der die Log-Funktion gespeichert wird.Bergmann89 hat geschrieben:"uGlobal" wird in jedem Projekt seperat angelegt und enthält eine Methode um Log-Einträge zu schreiben.
In jedem Projekt kannst du immer noch eine eigene Log-Funktion implementieren und diese in der Unit uGlobal einsetzen.
Vorteile: Deine projektunabhängigen Units sind an sich vollständig und können kompiliert werden, ohne dass die genau Log-Funktion bekannt sein muss. Die Units müssen nicht für jedes Projekt neu übersetzt werden (Lazarus erledigt das automatisch für dich, falls es notwendig sein sollte).
Nachteil: Du hast eine zusätzliche globale Variable sowie eine Unit, die nichts weiter als eine Typendefinition, diese Variable und gegebenenfalls eine Standardimplementierung (Nichts tun) enthält. Dein fertiges Programm wird dadurch leicht größer (im 1 bis 2 stelligen Kilobyte-Bereich) und benötigt ein wenig mehr Zeit zum Starten und Beenden (prozessorabhängig, hier vermutlich im Bereich von Nanosekunden).
Fazit: Die Nachteile sind vermutlich noch nicht einmal sichtbar.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 98
- Registriert: Di 15. Nov 2011, 11:36
Re: Linker friert ein
Hey,
ich hab das jetzt nicht in nem extra Packet probiert, aber mit ner Callback-Funktion bleibt der Linker auch hängen. Ich vermute sehr stark, das dort irgendwas in der LCL drin ist, das bei der COnsolenanwendung nicht richtig initialisiert wird und sich dann beim Linken verklemmt. Ich werd morgen mal die ganzen LCL-Sachen mit nem globalen $DEFINE raus schmeißen. Hoffentlich funktioniert das...
MfG Bergmann.
ich hab das jetzt nicht in nem extra Packet probiert, aber mit ner Callback-Funktion bleibt der Linker auch hängen. Ich vermute sehr stark, das dort irgendwas in der LCL drin ist, das bei der COnsolenanwendung nicht richtig initialisiert wird und sich dann beim Linken verklemmt. Ich werd morgen mal die ganzen LCL-Sachen mit nem globalen $DEFINE raus schmeißen. Hoffentlich funktioniert das...
MfG Bergmann.
-
- Beiträge: 593
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Linker friert ein
Platform? win, linux, mac?
Auf win kommt der Linker mit fpc, ansonsten ist der teil der Linux/Mac Distro.
Auf win: versuche -Xe (external linker)
---
Unhabhaengig: Schau dir LazLogger[Base] an. Ist ne log utility. Hat callbacks, oder Du kannst von der Klasse erben...
Auf win kommt der Linker mit fpc, ansonsten ist der teil der Linux/Mac Distro.
Auf win: versuche -Xe (external linker)
---
Unhabhaengig: Schau dir LazLogger[Base] an. Ist ne log utility. Hat callbacks, oder Du kannst von der Klasse erben...
-
- Beiträge: 98
- Registriert: Di 15. Nov 2011, 11:36
Re: Linker friert ein
Hey,
läuft auf Windows sowohl 64 als auch 32bit. Linux hab ich noch nich probiert.
Wenn ich -Xe nutze, dann friert er nicht ein, sondern spuckt n Fehler aus: "error while linking"
Ich werd jetzt erstma die LCL raus werfen, wie ich das oben schon angedeutet hatte. Danach guck'mer weiter...
MfG Bergmann
läuft auf Windows sowohl 64 als auch 32bit. Linux hab ich noch nich probiert.
Wenn ich -Xe nutze, dann friert er nicht ein, sondern spuckt n Fehler aus: "error while linking"
Ich werd jetzt erstma die LCL raus werfen, wie ich das oben schon angedeutet hatte. Danach guck'mer weiter...
MfG Bergmann
-
- Beiträge: 593
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Linker friert ein
Dann solltest Du versuchen, einen reproduzierbaren test zu machen, und einen bug reporten.
BTW: Welche Fehler Meldung?
Hast Du *alle* dateien "clean build"?
Suche nach doppelten .ppu oder .o dateien (in allen directories)
BTW: Welche Fehler Meldung?
Hast Du *alle* dateien "clean build"?
Suche nach doppelten .ppu oder .o dateien (in allen directories)
-
- Beiträge: 98
- Registriert: Di 15. Nov 2011, 11:36
Re: Linker friert ein
Hey,
der Fehler ist leider nur mit meinen Units reproduzierbar und das wird zu aufwendig das zu Suchen. Vorallem wenn mal nicht ma ne ordentliche Fehlermeldung bekommt. Die Fehlermeldung war wortwörtlich: "error while linking" ^^
CleanBuild hab ich gemacht, hilft nix. Ich hab bei mir alle Binarys vom Projekt in nem extra Directory. Das hab ich gelöscht und alles neu erzeugen lassen. Hat auch nix geholfen. Ich hab jetzt alles was mit der LCL und visuellen Sachen zu tun hat mit globalen $DEFINE raus geschmissen. Jetzt gehts. Langsam glaub ich, dass das gar kein Bug ist, sondern einfach LCL und Konsolenanwendung nicht funktioniert, weil die LCL ja nicht richtig initialisiert wurde...
MfG Bergmann.
der Fehler ist leider nur mit meinen Units reproduzierbar und das wird zu aufwendig das zu Suchen. Vorallem wenn mal nicht ma ne ordentliche Fehlermeldung bekommt. Die Fehlermeldung war wortwörtlich: "error while linking" ^^
CleanBuild hab ich gemacht, hilft nix. Ich hab bei mir alle Binarys vom Projekt in nem extra Directory. Das hab ich gelöscht und alles neu erzeugen lassen. Hat auch nix geholfen. Ich hab jetzt alles was mit der LCL und visuellen Sachen zu tun hat mit globalen $DEFINE raus geschmissen. Jetzt gehts. Langsam glaub ich, dass das gar kein Bug ist, sondern einfach LCL und Konsolenanwendung nicht funktioniert, weil die LCL ja nicht richtig initialisiert wurde...
MfG Bergmann.
-
- Beiträge: 593
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Linker friert ein
"Copy all and hidden messages"? Manchmal ist die eigentlich wichtige Nachricht versteckt.Bergmann89 hat geschrieben:Hey,
der Fehler ist leider nur mit meinen Units reproduzierbar und das wird zu aufwendig das zu Suchen. Vorallem wenn mal nicht ma ne ordentliche Fehlermeldung bekommt. Die Fehlermeldung war wortwörtlich: "error while linking" ^^
Oh, ja, hm haete ich eher sehen sollen.Langsam glaub ich, dass das gar kein Bug ist, sondern einfach LCL und Konsolenanwendung nicht funktioniert, weil die LCL ja nicht richtig initialisiert wurde...
Wenn du LCL nutzt, MUSST du die unit "interfaces" selbst einbinden. Die ist bei Konsole nicht enthalten. BTW, ggf LCL fuer "nogui" statt "win32" nutzen.