Frage

Ich habe ein Projekt, bestehend aus zwei Dateien, main.c und logoff.c. Wenn ich versuche, sie zu kompilieren ich diesen Fehler:

gcc -c -g -Wall main.c
gcc -c -g -Wall logoff.c
gcc -o main -g -Wall main.o logoff.o
ld: duplicate symbol _logoff in logoff.o and main.o

Ich habe eine Funktion Abmelde in logoff.c genannt, aber ich habe main.c für den Text „Abmelde“ gesucht und nichts gefunden (die so genannte Funktion noch nicht einmal ist!).

Wenn ich den Namen der Funktion ändern, um log_off es funktioniert. Es gibt eine zweite Funktion in der Datei, die dann bewirkt, dass die gleichen Fehler, wenn sein Name ebenfalls geändert wird.

Gibt es einen Grund, warum dies geschehen könnte? Ich habe dieses Problem auf zwei verschiedenen Systemen. Eine Sache, die relevant sein könnte, ist, dass ich die gleiche logoff.c Datei in einem anderen Projekt verwendet, aber es ist nicht auf diesen verbunden.

War es hilfreich?

Lösung

Erstellen Sie eine logoff.h Datei nur mit der Funktionsdeklaration von Abmelde, wie

void logoff(void);

Dann in main.c ist es mit #include "logoff.h". Fügen Sie keine logoff.c, wie der Compiler die Funktion zweimal kompiliert, und der Linker zwei Funktionen dieses Namens dann sehen.

Es scheint zu funktionieren, wenn Sie es log_off ändern, und dann auch nur einen von ihnen neu kompilieren. Die andere Objekt-Datei wird noch die alte Abmeldefunktion kompilierte in. Damit der Linker sieht man log_off und eine Abmelde. Das ist der Grund, es erschien mit diesem Namen für Sie zu arbeiten.

Andere Tipps

Haben Sie # include oder # Import logoff.c in main.c?

Sie haben - auch dort ist dein Problem. logoff.c wird in main.c enthalten, so Haupt definiert _logoff und _main. Nun kompilieren Sie auch logoff.c, die _logoff definiert. Dann versuchen Sie und verknüpfen die beiden, was bedeutet, das resultierende binäre Symbole _main enthält, _logoff und _logoff, was genau das ist, was der Linker Sie sagt.

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