Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
GregorS
- Beiträge: 3124
- Registriert: 05.06.2008 09:36:37
- Wohnort: Freiburg
-
Kontaktdaten:
Beitrag
von GregorS » 08.05.2023 12:25:35
Hallo zusammen!
Die Newsgruppe d.c.l.iso-c++ macht einen ziemlich toten Eindruck. Da meine Anfrage dort bislang (1 Woche) noch nicht einmal auftauchte (die dortige Moderation ist wohl „langfristig abwesend“), frage ich hier noch einmal und zitiere der Einfachheit halber einfach:
Code: Alles auswählen
Hallo allerseits!
Nachdem ich alle Syntax- und Tippfehler beseitigt habe, erhalte ich beim Kompilieren meines Codes eine Fehlermeldung,
die wohl vom Linker stammt:
$ make
g++ main.o tti.o itos.o marks.o sign.o help.o head.o kw.o teaser_.o -o gstkng -I/usr/include -L/usr/lib -Wall
/usr/bin/ld: teaser_.o: warning: relocation against `teaser' in read-only section `.text'
/usr/bin/ld: teaser_.o: in function `teaser_[abi:cxx11](int)':
teaser_.cc:(.text+0x13a): undefined reference to `teaser'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status
make: *** [Makefile:16: gstkng] Fehler 1
Wo sollte ich mit der Fehlersuche anfangen? Mit derlei Fehlermeldungen hatte ich bislang keinen Kontakt.
Kann mir hier geholfen werden?
TIA
Gregor
Zuletzt geändert von
GregorS am 08.05.2023 14:38:41, insgesamt 1-mal geändert.
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
schorsch_76
- Beiträge: 2594
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von schorsch_76 » 08.05.2023 12:44:37
Ist das ein OpenSource Projekt oder ein kommerzielles Projekt? Ohne den Quellcode lässt sich nicht viel sagen....
Offenbar kann der Linker dir Funktion "teaser" nicht finden. Das kann durch die C++ ABI gekommenb sein wenn gegen eine andere Bibliothek gelinkt wird. Mehr kann ich aus deiner Meldung nicht rauslesen.
-
GregorS
- Beiträge: 3124
- Registriert: 05.06.2008 09:36:37
- Wohnort: Freiburg
-
Kontaktdaten:
Beitrag
von GregorS » 08.05.2023 12:50:34
schorsch_76 hat geschrieben: 08.05.2023 12:44:37
Ist das ein OpenSource Projekt oder ein kommerzielles Projekt? Ohne den Quellcode lässt sich nicht viel sagen....
Oh, vergessen zu erwähnen: Es geht um ein privates Projekt, das mir helfen soll, das Kalendarium für meinen Taschenkalender zu erstellen. Mit meinem Code erzeuge ich SVG-Code, der am Ende zu PDF werden soll. Im Grunde soll mein jetziges Ge-code ein Programm ablösen, das ich vor >10 Jahren ziemlich schlampig umgesetzt habe.
Ob ich das am Ende auch für andere zugänglich machen werde, weiß ich noch nicht. Wenn, dann auf jeden Fall als irgendetwas Quelloffenes.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
schorsch_76
- Beiträge: 2594
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von schorsch_76 » 08.05.2023 12:51:43
Compiler? Os? Bibliotheken? Makefile? Infos .... sonst kann man da nix machen. oder nur du selbst
-
GregorS
- Beiträge: 3124
- Registriert: 05.06.2008 09:36:37
- Wohnort: Freiburg
-
Kontaktdaten:
Beitrag
von GregorS » 08.05.2023 12:55:30
schorsch_76 hat geschrieben: 08.05.2023 12:51:43
Compiler? Os? Bibliotheken? Makefile? Infos .... sonst kann man da nix machen. oder nur du selbst
Ich habe das komplette Ding mal dorthin gelegt:
https://test.szaktilla.de/gstkng_0.21.tbz.
Compiler ist g++, OS ist ein vorhin aktualisiertes Debian 11, über fehlende Bibliotheken wird nicht gemeckert.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
JTH
- Moderator
- Beiträge: 3077
- Registriert: 13.08.2008 17:01:41
- Wohnort: Berlin
Beitrag
von JTH » 08.05.2023 12:57:12
GregorS hat geschrieben: 08.05.2023 12:25:35
Code: Alles auswählen
/usr/bin/ld: teaser_.o: warning: relocation against `teaser' in read-only section `.text'
/usr/bin/ld: teaser_.o: in function `teaser_[abi:cxx11](int)':
teaser_.cc:(.text+0x13a): undefined reference to `teaser'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
Ein Schuss ins Blaue: Du hast die .o mit
-fpie gebaut, aber versuchst nun ohn
-pie zu linken?
Manchmal bekannt als Just (another) Terminal Hacker.
-
GregorS
- Beiträge: 3124
- Registriert: 05.06.2008 09:36:37
- Wohnort: Freiburg
-
Kontaktdaten:
Beitrag
von GregorS » 08.05.2023 13:01:45
JTH hat geschrieben: 08.05.2023 12:57:12
GregorS hat geschrieben: 08.05.2023 12:25:35
Code: Alles auswählen
/usr/bin/ld: teaser_.o: warning: relocation against `teaser' in read-only section `.text'
/usr/bin/ld: teaser_.o: in function `teaser_[abi:cxx11](int)':
teaser_.cc:(.text+0x13a): undefined reference to `teaser'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
Ein Schuss ins Blaue: Du hast die .o mit
-fpie gebaut, aber versuchst nun ohn
-pie zu linken?
„-fpie“ lese ich gerade zum ersten Mal. Also nein, das taucht meinerseits nirgendwo explizit auf. Ich kenne aber den Linker nicht einmal ansatzweise. Vielleicht holt der sich ja noch anderswo so etwas dazu ...?
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
JTH
- Moderator
- Beiträge: 3077
- Registriert: 13.08.2008 17:01:41
- Wohnort: Berlin
Beitrag
von JTH » 08.05.2023 13:07:27
Deine Variable
teaser ist nirgendwo
definiert. Die
in head.cc und teaser_.hh sind beides nur
Deklarationen, die bekanntgeben, dass diese Variable irgendwo anders definiert wird.
Du brauchst also in einer der .cc – wo es sinnvoll ist – noch ein
ohne
extern.
Manchmal bekannt als Just (another) Terminal Hacker.
-
GregorS
- Beiträge: 3124
- Registriert: 05.06.2008 09:36:37
- Wohnort: Freiburg
-
Kontaktdaten:
Beitrag
von GregorS » 08.05.2023 14:00:55
JTH hat geschrieben: 08.05.2023 13:07:27
... Du brauchst also in einer der .cc – wo es sinnvoll ist – noch ein
ohne
extern.
Dann hast Du vermutlich die Zeilen
Code: Alles auswählen
tti birthdays("birthdays.txt");
tti holidays("holidays.txt");
tti teaser("teaser.txt");
in main.cc übersehen. Dort werden jeweils Instanzen der tti-Klasse angelegt und gleich mit den Sachen aus den .txt-Dateien gefüttert. Evtl. sollte ich das Einlesen nicht gleich im Konstruktor vornehmen ...? ...
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
JTH
- Moderator
- Beiträge: 3077
- Registriert: 13.08.2008 17:01:41
- Wohnort: Berlin
Beitrag
von JTH » 08.05.2023 14:31:27
GregorS hat geschrieben: 08.05.2023 14:00:55
Dann hast Du vermutlich die Zeilen […] in main.cc übersehen.
Sag das dem Compiler
Ja, die hab ich übersehen. Aber diese Definition einer Variable
teaser hilft auch nicht. Eine
extern-Deklaration kann sich nicht auf eine lokale Variable in einer Funktion beziehen. Zugegriffen wird auf die Variable
teaser übrigens in
teaser_() und daran scheitert es.
Du könntest, statt mit einer globalen und extern deklarierten Variable zu hantieren, der Funktion
teaser_() auch einfach eine Referenz auf dein
teaser-Objekt aus
main() übergeben:
Manchmal bekannt als Just (another) Terminal Hacker.
-
schorsch_76
- Beiträge: 2594
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von schorsch_76 » 08.05.2023 14:33:05
Soll teaser eine globale Variable sein?
-
JTH
- Moderator
- Beiträge: 3077
- Registriert: 13.08.2008 17:01:41
- Wohnort: Berlin
Beitrag
von JTH » 08.05.2023 14:34:51
schorsch_76 hat geschrieben: 08.05.2023 14:33:05
Soll teaser eine globale Variable sein?
Von mir aus nicht
aber so wird oder wurde sie zumindest benutzt.
Siehe noch meine Ergänzung im vorigen Beitrag.
Manchmal bekannt als Just (another) Terminal Hacker.
-
GregorS
- Beiträge: 3124
- Registriert: 05.06.2008 09:36:37
- Wohnort: Freiburg
-
Kontaktdaten:
Beitrag
von GregorS » 08.05.2023 14:38:21
Uh, ja, shit. Ich hatte wohl zu lang mit Arduino zu tun. Seit ich die tti-Instanzen global definiert habe, geht's
Danke für den Schubs!
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])