[erledigt][ld] Hilfe bei Fehlersuche benötigt

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
GregorS
Beiträge: 3144
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

[erledigt][ld] Hilfe bei Fehlersuche benötigt

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])

Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: [ld] Hilfe bei Fehlersuche benötigt

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.

Benutzeravatar
GregorS
Beiträge: 3144
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von GregorS » 08.05.2023 12:50:34

schorsch_76 hat geschrieben: ↑ zum Beitrag ↑
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])

Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: [ld] Hilfe bei Fehlersuche benötigt

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 ;)

Benutzeravatar
GregorS
Beiträge: 3144
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von GregorS » 08.05.2023 12:55:30

schorsch_76 hat geschrieben: ↑ zum Beitrag ↑
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

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von JTH » 08.05.2023 12:57:12

GregorS hat geschrieben: ↑ zum Beitrag ↑
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.

Benutzeravatar
GregorS
Beiträge: 3144
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von GregorS » 08.05.2023 13:01:45

JTH hat geschrieben: ↑ zum Beitrag ↑
08.05.2023 12:57:12
GregorS hat geschrieben: ↑ zum Beitrag ↑
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

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von JTH » 08.05.2023 13:07:27

Deine Variable teaser ist nirgendwo definiert. Die

Code: Alles auswählen

extern tti teaser;
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

Code: Alles auswählen

tti teaser;
ohne extern.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
GregorS
Beiträge: 3144
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von GregorS » 08.05.2023 14:00:55

JTH hat geschrieben: ↑ zum Beitrag ↑
08.05.2023 13:07:27
... Du brauchst also in einer der .cc – wo es sinnvoll ist – noch ein

Code: Alles auswählen

tti teaser;
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

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von JTH » 08.05.2023 14:31:27

GregorS hat geschrieben: ↑ zum Beitrag ↑
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:

Code: Alles auswählen

string teaser_(tti& teaser, int monthnumber)
{
    …
}
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: [ld] Hilfe bei Fehlersuche benötigt

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

Re: [ld] Hilfe bei Fehlersuche benötigt

Beitrag von JTH » 08.05.2023 14:34:51

schorsch_76 hat geschrieben: ↑ zum Beitrag ↑
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.

Benutzeravatar
GregorS
Beiträge: 3144
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: [ld] Hilfe bei Fehlersuche benötigt

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])

Antworten