Linker Error LNK2001
-
ReZZeX schrieb:
Ja, das hab ich gemacht, das meiste aber ersetzt zu Win32 Varianten Bekomme die Fehler aber einfach nicht weg..
Warum?
-
ReZZeX schrieb:
Was wäre denn das richtige Forum?
Compiler und IDE?
-
.........
-
ReZZeX schrieb:
Weil dann jeder PC wo man das Program runterlädt auch die kack C++ Runtime Libary runterladen muss. Heißt das Program funktorniert nicht auf frisch formartierten PCs.
> Die Runtime statisch linken.
Warum solltest du auf die Standardbibliothek verzichten wollen?
-
DarkShadow44 schrieb:
> Die Runtime statisch linken.
Weils nicht offensichtlich ist wie das geht: In den Projekteigenschaften unter C/C++ -> Code Generation -> Runtime Library von "Mulit-threaded DLL (/MD)" auf "Mulit-threaded (/MT)" umstellen. Man muss dann aber alle Libraries die man benutzt mit der gleichen Einstellung compilieren, sonst gibts nacher viele andere lustige Linkerfehler.
-
ReZZeX schrieb:
Weil dann jeder PC wo man das Program runterlädt auch die kack C++ Runtime Libary runterladen muss. Heißt das Program funktorniert nicht auf frisch formartierten PCs.
Ja, aber wie du siehst brauchst du die Runtime Library, die kümmert sich um so Sachen wie new.
Deshalb statisch linken.
-
............
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
.....
-
ReZZeX schrieb:
So ich habe jetzt herausgefunden
Das war dir doch eigentlich von Anfang an klar.
Dann ersetzt mal BYTE durch char und probier aus, ob der Fehler dann auch auftritt. Wenn nein, liegt es an BYTE, was immer das auch ist.
-
............
-
Nun, dann handelt es sich wohl um BYTE aus Windows, d.h. statt char müsste unsigned char funktionieren. Das wird dann aber wohl auch nicht helfen, da du das Projekt irgendwie kaputtkonfiguriert hast.
Vielleicht solltest du deine Dateien in ein neu mit VS angelegtes Projekt kopieren und dann nicht an Schaltern herumspielen, die du nicht genau kennst.
-
........
-
.............
-
Na, wenn du statisch linkst landet der komplette Code, der vorher in der externen DLL war in deiner exe, deshalb ist die größer, der Nutzer braucht die DLL aber nicht.
Deshalb nimmt man ja DLLs.
-
........
-
ReZZeX schrieb:
Also dann würde ich lieber wieder meine alte Variante /NODEFAULTLIBARY nehmen.
Dann musst du die komplette C++ Runtime schreiben, von Speicherverwaltung über Exception Handling bis hin zum Initialisierungscode, der dir globale Variablen initialisiert. Höchstwahrscheinlich brauchst du auch noch Teile der C Standardbibliothek, die musst du dann auch schreiben. Genauso wie die C++ Standardbibliothek. Das ist für dich schlicht und ergreifend nicht möglich.
Also musst du die entweder statisch oder dynamisch linken. Dynamisch willste nicht, also bleibt nur statisch. Die Größe der .exe kannst du vielleicht verkleinern, indem du Debuggingsymbole raushaust, weiß nicht genau wie MSVC das macht.
-
Was sind genau die "Debuggingsymbole"? Und ich habe halt wie gesagt schon alles verlinkt und bekomme nur noch diese beiden Linker Error die über Memory Allocation (?) gehen.
-
Hallo,
angemeckert werden die []-Operatoren, also
void * __cdecl operator new[](unsigned int bytes) { return HeapAlloc(GetProcessHeap(), 0, bytes); } void __cdecl operator delete[](void *ptr) { if(ptr) HeapFree(GetProcessHeap(), 0, ptr); }
-
.....