![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Jr. Member
![]() Registriert seit: 17.05.2001
Alter: 52
Beiträge: 80
|
![]() Hallo Leute!
Ich hätte da unten was zum knabbern. Ich arbeite grad an nem recht großen SW-Ding, und bekomme nach einem Systemabsturz nun unten angefügte Meldung. Laut meinem Informationsstand bedeuted das, das mein Linker diverse Funktionen in anderen zu linkenden Objekten findet. Nur soweit ich es beurteilen kann, sind alle Header da!?!? Wäre dankbar für ein paar Hinweise, weil mich wohl bald mein Vorgesetzter killen wird, wenn ich den Fehler nicht bald finde. thx G ================================================== ==================== Linker-Vorgang läuft... Bibliothek Debug/MsgServer.lib und Objekt Debug/MsgServer.exp wird erstellt Calculator.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: class CString __thiscall CGate::GetTempValueOut(void)" (?GetTempValueOut@CGate@@QAE?AVCString@@XZ) Calculator.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall CGate::GetValue(void)" (?GetValue@CGate@@QAEHXZ) Calculator.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: class CString __thiscall CGate::GetName(void)" (?GetName@CGate@@QAE?AVCString@@XZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CCMServerView::CCMServerView(class CWnd *)" (??0CCMServerView@@QAE@PAVCWnd@@@Z) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall CMilacronFile::ReadSettings(void)" (?ReadSettings@CMilacronFile@@QAEHXZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CMilacronFile::CMilacronFile(class CString)" (??0CMilacronFile@@QAE@VCString@@@Z) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CMilacronFile::~CMilacronFile(void)" (??1CMilacronFile@@QAE@XZ) . . . MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall CCMServerView: ![]() MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall CMachine::GetMemIndex(void)" (?GetMemIndex@CMachine@@QAEHXZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: struct HWND__ * __thiscall CMachine::SetItemValue(char const *,char const *)" (?SetItemValue@CMachine@@QAEPAUHWND__@@PBD0@Z) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall CMachine::GetMachineID(void)" (?GetMachineID@CMachine@@QAEHXZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: class CString __thiscall CMachine::GetTopic(void)" (?GetTopic@CMachine@@QAE?AVCString@@XZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall CMachine::IsConnected(void)" (?IsConnected@CMachine@@QAEHXZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall CMachine::SetGateRetVal(int,int)" (?SetGateRetVal@CMachine@@QAEXHH@Z) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall CMachine::IsFinished(void)" (?IsFinished@CMachine@@QAEHXZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall CMachine::ReadDriverValues(void)" (?ReadDriverValues@CMachine@@QAEXXZ) MainFrm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CLogin::CLogin(class CWnd *)" (??0CLogin@@QAE@PAVCWnd@@@Z) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct HDDEDATA__ * __cdecl HelpXfer(struct _XFERINFO *,unsigned short)" (?HelpXfer@@YAPAUHDDEDATA__@@PAU_XFERINFO@@G@Z) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct HDDEDATA__ * __cdecl sysFormatsXfer(struct _XFERINFO *,unsigned short)" (?sysFormatsXfer@@YAPAUHDDEDATA__@@PAU_XFERINFO@@G @Z) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct HDDEDATA__ * __cdecl ItemListXfer(struct _XFERINFO *,unsigned short)" (?ItemListXfer@@YAPAUHDDEDATA__@@PAU_XFERINFO@@G@Z ) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct HDDEDATA__ * __cdecl TopicListXfer(struct _XFERINFO *,unsigned short)" (?TopicListXfer@@YAPAUHDDEDATA__@@PAU_XFERINFO@@G@ Z) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct HDDEDATA__ * __stdcall DdeCallback(unsigned int,unsigned int,struct HCONV__ *,struct HSZ__ *,struct HSZ__ *,struct HDDEDATA__ *,unsigned long,unsigned long)" (?DdeCallback@@YGPAUH DDEDATA__@@IIPAUHCONV__@@PAUHSZ__@@1PAU1@KK@Z) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall CFormatInfo::SetAtom(unsigned short)" (?SetAtom@CFormatInfo@@QAEXG@Z) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: char * __thiscall CFormatInfo::GetSz(void)" (?GetSz@CFormatInfo@@QAEPADXZ) Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CFormatInfo::CFormatInfo(unsigned short,char *)" (??0CFormatInfo@@QAE@GPAD@Z) Topic.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: char * __thiscall CItem::GetName(void)" (?GetName@CItem@@QAEPADXZ) Topic.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CItem::CItem(char *,struct HDDEDATA__ * (__cdecl*)(struct _XFERINFO *,unsigned short))" (??0CItem@@QAE@PADP6APAUHDDEDATA__@@PAU_XFERINFO@@ G@Z@Z) Topic.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: struct HSZ__ * __thiscall CItem::GetItem(void)" (?GetItem@CItem@@QAEPAUHSZ__@@XZ) Topic.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall CItem::SetItem(struct HSZ__ *)" (?SetItem@CItem@@QAEXPAUHSZ__@@@Z) Topic.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: struct HDDEDATA__ * __thiscall CItem: ![]() Debug/MsgServer.dll : fatal error LNK1120: 35 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe.
____________________________________
> > > Bei mir gib\'s keine Viren ich hab ne Putzfrau < < < |
![]() |
![]() |
![]() |
#2 |
bitte Mailadresse prüfen!
Registriert seit: 17.03.2002
Beiträge: 198
|
![]() hallo,
Verwendest du eine externe Bibliothek? sieht aus, als ob ein paar lib files abgehen würden. du hast wahrscheinlich zwar alle header, nicht aber die dazugehörigen libs angegeben... Unter: Project/Settings/Link->Object/Library Modules das .lib file eintragen, unter tools/options/directories/library files das verzeichnis einstellen... g |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() wenns erst NACH dem absturz aufgetreten is, schau ob sich das visual studio die einstellungen in der projektdatei gemerkt hat. wenn nicht probier das letzte, was du vor dem absturz geändert hast noch einmal
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#4 |
Jr. Member
![]() Registriert seit: 17.05.2001
Alter: 52
Beiträge: 80
|
![]() Erleuterung:
Ich bin seit 01.10.02 in der Firma (als Java Entwickler) und sitze seit diesem Tag an einem bestehenden VC++ Programm, das vor 3 Jahren von einem nicht mehr vorhandenen Mitarbeiter geschrieben wurde. Dieses Prog. wurde mittlerweile von 2 weiteren Programmierern verändert. Es existiert praktisch keine Inline-Doku (ausser so Kommentare wie "Diese Schleife könnte ... machen"). Ich bin der einzige im Unternehmen, der VC schon mal programmiert hat, kann somit keinen anderen um Rat fragen. Weiters kann mir keiner schlüssig sagen was das Programm genau macht bzw. wie (Ablauf, Abhängigkeiten,...) Das ganze besteht aus mehreren SW-Einzelprojekten (Anzahl unbekannt) und erstreckt sich von HW-naher Programmierung (SPS-Schnittstelle) über DB-Anbindung (Progress), Treiberdateien von Drittanbietern bis hin zur GUI. Der ursprüngliche Fehler den es zu finden gab, war der, dass die SW unzyklisch die abzufragenden Maschinen abschaltet und wieder hochfährt. Nachdem ich eine testreife geänderte Version beisammen hatte, die mir zumindest mal die Info ausgibt, wann durch welchen Funktionsaufruf welche Maschine abgeschaltet wird, hängt sich doch glatt meine PC-Mühle auf. Und nun habe ich oben beschriebenes Problem. Die einzige .lib die ich gefunden habe, habe ich (so wie auch alle header) in einen eigenen Ordner gegeben und diesen auch angegeben damit der Linker dort sucht. Leider erfolglos! Ich kann nicht mal mit Sicherheit sagen, ob diese .lib die einzige ist, oder obs mehr gibt und die einfach nur verloren gegangen ist... *verzweifel* G ![]()
____________________________________
> > > Bei mir gib\'s keine Viren ich hab ne Putzfrau < < < |
![]() |
![]() |
![]() |
#5 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() gibts in deiner firma sowas wie sourcesafe? vielleicht kannst da nachschaun, welche libs alle da sein sollten - falls das wirklich so ein gravierender absturz war und das problem nicht ganz wo anders liegt.
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#6 |
Jr. Member
![]() Registriert seit: 17.05.2001
Alter: 52
Beiträge: 80
|
![]() Als ich den source bekommen habe, hab ich noch gefragt, ob ich mir eine Kopie machen soll.
Antwort: nö Nun hat sich rausgestellt, dass ich die ganze Zeit am Orig. gearbeitet habe (einzige Version). Gibt es in VC sowas wie in Java? Da kann ich ja auch aus nem .jar File die .class und .java Dateien reproduzieren. G
____________________________________
> > > Bei mir gib\'s keine Viren ich hab ne Putzfrau < < < |
![]() |
![]() |
![]() |
#7 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() glaub ich nicht. das maximale was du zurückgewinnen kannst (wenns ein release compile dh ohne debug info ist) is assembler code.
da stehn deine chancen nicht gut
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#8 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() aber du kannst schaun, in welchen files die gesuchten symbole stehen. dann kannst dir die build targets der symbole anschaun also ob sie direkt in die exe kommen oder eben ein .lib file produzieren, das statisch dazugelinkt wird.
harte knochenarbeit, aber müsst funktionieren. und dann kennst das projekt wenigstens in und auswendig ![]()
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#9 |
Jr. Member
![]() |
![]() du kannst aus keinem jar archiv die java files reproduzieren
jar ist ein kompressionsverfahren und zwar eigentlich genau dasselbe wie zip du kannst nur java dateien extrahieren wenn sie mitgeliefert sind zu deinem problem: ich werds mal einfach ausdruecken: es haengt nicht mit den headern zusammen header sind dazu da beim compile vorgang symbole bereitzustellen damit der compiler deine selbst geschriebenen funktionen checken kann der linker demgegenueber loest diese symbole auf und ersetzt sie durch die sprung adressen der tatsaechlichen symbole welche sich in exe files oder output files des VC++ Compilers befinden (was auch eine libary sein kann) es sind verschieden symbole beim linker zu sehen wie CMilacronFile versuch durch deine sourcen zu suchen und diese symbole zu finden fuege diese files dem projekt hinzu und versuch alles neu zu uebersetzen btw CMilacronFile ist nicht MFC ... glaub ich ... also sollte es entweder eine firmeninterne libary sein (zu der ihr die sourcen haben solltet) oder ein paar files in deinem projekt sein versuch mal alles neu zu uebersetzen .. alles was du findest gomberl ps; kleiner tip -> kopien macht man immer ... sicher ist sicher .. das kenn ich auch schon pss: guter tip zum suchen und editieren von sourcecodes ist EditPlus ein gutes tool |
![]() |
![]() |
![]() |
#10 |
Jr. Member
![]() Registriert seit: 17.05.2001
Alter: 52
Beiträge: 80
|
![]() 1)
Also, soweit ich das bisher sehe, stehen mir 5 zusammengehörige Projekte zur Verfügung (ohne DB): calculator -> .exe cmserver -> .exe hardlock -> .??? (Tongel) milacronDriver -> .exe MsgServer -> .dll Calculator,hardlock und milacronDriver kann ich fehlerfrei erstellen. Calculator und milacronDriver auch ausführen. Erstelle ich das MsgServer bekomme ich die euch schon bekannten Fehler. Beim cmserver diese: Siehe Anhang Ausserdem erhalte ich die (ebenfalls im Anhang ersichtliche) Meldung, dass die cmserver.exe nicht vorhanden ist und ob sie erstellt werden soll. Nach bejahen fährt er mit Fehlern fort. .exe wird keine erzeugt. 2) Meint Ihr mit Symbolen die Bezeichnungen meiner .cpp und .h files (wie zB.: CMilacronFile, MainFrm, Server,...)? Wenn ja, denen lauf' ich schon seit 2 Tagen nach. Sowohl die Funktionen, die der Linker sucht, als auch die Objekte in denen diese enthalten sein sollen sind vorhanden aber er findet sie einfach nicht. Ich hab auch schon ein globales header Verzeichnis angelegt, und noch dazu explizit alle Verzeichnisse angegeben, in denen irgenwelche header Files liegen (Daher wohl auch der lnk2005). No Result Hab auch ein globales .lib Verzeichnis angelegt. Detto 3) Verständnisfrage: .cpp wird .obj, .obj enthält F-Aufrufe von F in anderen .obj, Linker sucht die Verbindung und (in meinem Fall) kapituliert. G
____________________________________
> > > Bei mir gib\'s keine Viren ich hab ne Putzfrau < < < |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|