Frage

Ich bin in einer Linux-Umgebung mit C ++ arbeiten, den GCC-Compiler.

Im Moment arbeite ich an zu modifizieren und einen großen vorbestehenden Körper des Codes zu aktualisieren. Als Teil davon, ist es notwendig, ein recht große Anzahl von kleinen Artikeln über den gesamten Code in einer Vielzahl von Orten hinzufügen Dinge miteinander zu verbinden, und auch in mehreren neuen externen Code-Bibliotheken hinzuzufügen. Es gibt auch eine sehr große und komplexe Struktur von Makefiles zu einer configure.ac Datei verknüpft, um den Build-Prozess zu behandeln.

das Build-Prozess alles Beim Starten kompiliert, ohne ein Problem, aber kommt mit den gefürchteten Linker-Fehlern, wenn eine neu hinzugefügte benutzerdefinierten Code-Bibliothek zu verwenden versuchen, die wir erstellt haben. Wir haben nun durch eine große Menge an Code war mit einem feinen Kamm Zahn für Rechtschreibung Mismatches suchen, Prüfung der Bestellung, dass alle Bibliotheken in den Build-Prozess enthalten sind, und überprüft, dass die .o-Dateien erstellt werden, enthalten, was wir brauchen Deponien verwendet, und alle sind und wo sie sein sollten. Wir haben getestet auch die Bibliothek separat und das Problem definitiv nicht liegen.

Kurz gesagt, haben wir die meisten Dinge ausprobiert, die man normalerweise in diesen Szenarien tun sollten.

Gibt es ein Tool für C ++, die automatisch Linkerfehler erkennen können, in ähnlicher Weise cppcheck oder Schiene (die wir beide ohne Erfolg ausgeführt haben), die hier helfen könnte?

War es hilfreich?

Lösung

Sie Ihre Plattform nicht wissen, aber ich verbrachte einige Zeit mit Linker Probleme in gcc, bis ich, dass die statische Bibliothek (.a) Verknüpfung spezifische Anordnung realisiert erfordert, es ist nicht das gleiche gcc object.o first.a second.a als gcc object.o second.a first.a zu verbinden.

Andere Tipps

FWIW (nicht viel) Ich versuche, diese Art von Problem durch Verwendung eines anderen Linken in Angriff zu nehmen, wie ich Zugriff auf ein paar verschiedenen Plattformen habe. Wenn Sie einen anderen Linker verwenden können, werden Sie feststellen, entweder:

a) das Programm Links, die Ihr Problem verwandelt sich von ‚warum es nicht verlinken?‘ zu ‚was sind die Unterschiede zwischen Linker und Verknüpfung?‘ Das ist nicht gerade ein Schritt nach vorn, aber manchmal einen Schritt zur Seite gibt Ihnen eine andere Perspektive, aus der man eine Lösung finden kann;

oder

b) scheitert es zu verknüpfen, wobei in diesem Fall die anderen Linker nützliche Informationen geben könnten, warum es funktioniert nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top