Zum Inhalt springen

LNK2005 Linker Error


Empfohlene Beiträge

Hi,

ich bin hier etwas am verzweifeln. Ich habe in einem Projekt folgende Dateien:

main.cpp

md5.cpp

main.h

md5.h

in der md5.h steht unter anderem folgendes:


#include <stdio.h>
#include <math.h>
#include <memory.h>
typedef unsigned long ulong;
typedef unsigned char uchar;

// 1..64 ==> [65], constructed from a sine function
// T[i] = (ulong) (4294967296 * abs(sin(i)))
ulong T[65];

ulong hashval[4];

// to initialize A, B, C and D
ulong magic[4] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 };

struct md5_struc {
ulong A, B, C, D;
ulong X[16];
};

ulong *X;
[/PHP]

Die md5.cpp includiert die md5.h

Die main.h includiert unter anderem die stdio.h

Die main.cpp includiert die main.h und die md5.h

Beim Linken bekomme ich immer die Fehler:

MD5.OBJ : error LNK2005: "unsigned long * magic" (?magic@@3PAKA) bereits in main.obj definiert

MD5.OBJ : error LNK2005: "unsigned long * hashval" (?hashval@@3PAKA) bereits in main.obj definiert

MD5.OBJ : error LNK2005: "unsigned long * X" (?X@@3PAKA) bereits in main.obj definiert

MD5.OBJ : error LNK2005: "unsigned long * T" (?T@@3PAKA) bereits in main.obj definiert

Debug/OU_DLCL.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

Fehler beim Ausführen von link.exe.

Wie kann ich das umgehen?:confused:

Gruß

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab jetzt mal die Zeile

ulong magic[4] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 };

in die md5.cpp verlagert, was ja auch logisch ist da magic direkt definiert wird.

Jetzt bekomme ich aber immer noch die Fehler das hashval, T und X mehrmals

definiert wären. Diese werden in der md5.h aber doch nur deklariert, sodass das

doch keine Probleme machen dürfte.

:confused: :confused: :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Guybrush Threepwood

Jetzt bekomme ich aber immer noch die Fehler das hashval, T und X mehrmals

definiert wären. Diese werden in der md5.h aber doch nur deklariert, sodass das

doch keine Probleme machen dürfte.

:confused: :confused: :confused:

Nein, diese drei werden definiert. Wenn du diese Headerdatei in mehr als einer Quellcodedatei mit #include einbindest, werden sie mehrfach definiert. Da helfen auch keine #include-Guards (sorry @ Knuddlbaer).

Du könntest die drei in der Headerdatei als extern deklarieren (dann werden sie wirklich nur deklariert), und die Definitionen in eine .cpp-Datei verschieben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also mit extern funktioniert es, DANKE!

Allerdings verstehe ich immer noch nicht warum diese 3 Variablen da definiert werden. Ein Definition wäre es doch nur wenn ich direkt einen Wert zuweise, da ich aber doch nur sage das sie vorhanden sind müßte es doch eine deklaration sein.:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Guybrush Threepwood

Allerdings verstehe ich immer noch nicht warum diese 3 Variablen da definiert werden. Ein Definition wäre es doch nur wenn ich direkt einen Wert zuweise, da ich aber doch nur sage das sie vorhanden sind müßte es doch eine deklaration sein.:confused:

Nein, wenn du einen Wert zuweisen würdest, wäre es eine Definition mit Initialisierung.

Wenn das keine Definition wäre, sondern nur eine Deklaration, wo sind dann diese Variablen definiert? ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...