gcc: Linker error zurückverfolgen

S

supersucker

Foren Gott
Heyho,

ich hab folgendes Problem:

Ich versuche hier eine in C geschriebene Applikation zum Laufen zu bringen, mittlerweile bin ich schon soweit das das Ding wenigstens kompiliert, dummerweise kriege ich jetzt den wahnsinnig aussagekräftigen Linkererror:

Code:
collect2: ld returned 1 exit status

Darüber kommen haufenweise warnings wegen "undefined references", aber keine errors. (Und nein, ich kann nicht erstmal all die Warnings beseitigen, weil 1. der Code ca. 30000 Zeilen umfaßt, 2. nicht von mir ist sondern 3. von jemand der offensichtlich als einzige Qualifikation eine zweiwöchige Arbeitsamt-Umschulung zum Fachinformatiker vorzuweisen hat)

Deshalb nun meine Frage:

Wie kriege ich den Linker dazu eine genauere Angabe zu machen wo er scheitert?

Bisherige Linker-Flags sind

Code:
-g
-Wall

Google und die manpage vom gcc haben mich diesbezüglich nicht wirklich weiter gebracht.....:think: .......komisch, das muss doch genauer rauszufinden sein.......
 
Die 'undefined references' sind (zumindest ein Teil) des Fehlers, auch wenn sie als Warnung dargestellt werden.

Sie treten in der Regel auf, wenn man eine Funktion benutzt, die deklariert aber nicht definiert ist. Zum Beispiel, indem man eine include-Direktive auf math.h hat, die Sinus-Funktion aufruft und beim Linken vergisst, '-lm' mitanzugeben. Wenn es tatsaechlich externe Funktionen sind, reicht es vermutlich aus, die entsprechende Bibliothek miteinzubinden. Ansonsten fehlt Dir vielleicht ein Teil vom Code.
 
Deiner Ansicht nach gibt es also keine Möglichkeit herauszufinden weshalb der Linker genau abgebrochen ist?
 
Deiner Ansicht nach gibt es also keine Möglichkeit herauszufinden weshalb der Linker genau abgebrochen ist?

Nein. Meiner Meinung nach ist eine 'undefined reference' ein Grund fuer den Linker, abzubrechen. Es werden ja die entsprechenden fehlenden Referenzen mitangegeben, wie Du ja auch gesagt hast. Die musst Du suchen und finden, um das Problem zu loesen.
 
Ja,

das Dumme ist halt, das ca. 30 - 40 undefined references aus verschiedenen sources-files vorbeirauschen, deshalb frage ich mich halt ab wann für den linker eine undefined reference ein Grund ist abzubrechen.

Denn die letzte undefined reference ist 1. nicht die letzte linker-action (dann könnte ich es nachvollziehen) und sieht 2. nicht "schlimmer" aus als die anderen.

Anyway, dann würg ich mal weiter....danke dir soweit.....
 
Das ist wohl ein 'feature':
man ld schrieb:
Aside from its flexibility, the GNU linker is more helpful than other
linkers in providing diagnostic information. Many linkers abandon exe-
cution immediately upon encountering an error; whenever possible, ld
continues executing, allowing you to identify other errors (or, in some
cases, to get an output file in spite of the error).
 
Dann ließ Dir mal man ld genau durch.
Ebenso info gcc.

Dort steht nämlich, wie man Debugger Informationen einschaltet und in eine Datei umleitet.
 
Dann ließ Dir mal man ld genau durch.
Ebenso info gcc.

Sorry, aber bei einer manpage, die ein Buch füllt zu sagen "steht doch in der manpage" ist ja mal völlig sinnentleert.

Wenn du die Frage liest "Wie wechsel ich Verzeichnisse" , sagt du vielleicht "frag google" aber du sagt garantiert nicht "man bash" oder? (du kannst es natürlich machen, aber inwieweit das sinnvoll ist....)

So, und google hab ich gefragt, aber über diesen Fall was Griffiges bei google zu finden ist nicht so einfach wie bei meiner Beispielfrage. (wie schon gesagt -g und -Wall sind an).
Vor allem wenn man - wie ich - nur sporadisch mit dem gcc arbeitet.
Und ich hab auch die relevanten Abschnitte in der man-page überflogen.

Also gib doch einfach einen sinnvollen Tip oder spar dir solche total überflüssigen Kommentare.
 
Danke! Ebenso.

Debugging im GCC anschalten: mit Hilfe des Compilerflags -gddb.
 

Ähnliche Themen

Superkaramba @ Debian FEHLER????

Zurück
Oben