Visual C++: Quelltext ignoriert => Linkerfehler

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Visual C++: Quelltext ignoriert => Linkerfehler

Beitrag von Xin » Mo Sep 28, 2009 7:49 am

Inzwischen kompiliert mein Projekt soweit - wie gesagt unter Linux/Mac ist das per Makefile eigentlich noch nichts so erwähnenswertes.

Ich habe noch folgenden Fehler:

Code: Alles auswählen

typelist.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: char const * __thiscall XSD::Gsys::Key::ToString(void)const " (?ToString@Key@Gsys@XSD@@QBEPBDXZ)".
Das ist zunächst erstmal nichts besonderes: XSD::Gsys::Key::ToString() wurde nicht kompiliert.

Die Funktion befindet sich in token.cpp:

Code: Alles auswählen

namespace XSD {
namespace Gsys {
...
char const * Key::ToString( void ) const
...
Die Datei ist im Projekt: Das gibt der Compiler im Ausgabefenster aus:

Code: Alles auswählen

------ Neues Erstellen gestartet: Projekt: genesys, Konfiguration: Debug Win32 ------
Die Zwischen- und Ausgabedateien für das Projekt "genesys" mit der Konfiguration "Debug|Win32" werden gelöscht.
Kompilieren...
area.cpp
file.cpp
fileposition.cpp
segment.cpp
stack.cpp
table.cpp
lineendencoding.cpp
path.cpp
representation.cpp
searchtoken.cpp
string.cpp
token.cpp                           <---------- da isse!
wikistring.cpp
unit.cpp
...
Die Datei 'token.cpp' beginnt derzeit so aus und auch der Rebuild aus dem ich den Text hierdrüber kopiert habe, wurde mit diesem Code kompiliert:

Code: Alles auswählen

Hier steht kompletter Unsinn!
dsfasd
//#include "token.h"

namespace XSD {
namespace Gsys {

...
Kurz: Der Linker findet die Funktionen nicht, weil die token.cpp komplett ignoriert wird. Sie soll den Einstellungen nach 'gebuildet' werden per C/C++-Buildtool.
Alle anderen Dateien werden gefunden und vom Linker nicht beanstandet.
Weiß jemand eine Erklärung dazu?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Visual C++: Quelltext ignoriert => Linkerfehler

Beitrag von Xin » Mo Sep 28, 2009 9:05 am

Nachricht an mich selbst:
Ich habe den Verdacht, dass Visual Studio mit mehreren Dateien 'token.cpp', die in unterschiedlichen Verzeichnissen stehen, nicht gut klar kommt. Vermutlich bildet es die Verzeichnis-Struktor bei den Objectsfiles nicht nach, womit ein token.o gebaut werden soll, aber schon ein token.o da ist, das aktueller als der zu kompilierende token.cpp-Quelltext ist - weshalb er ignoriert wird.

Werde ich heute abend mal überprüfen...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Visual C++: Quelltext ignoriert => Linkerfehler

Beitrag von Kerli » Mo Sep 28, 2009 6:49 pm

Xin hat geschrieben:Ich habe den Verdacht, dass Visual Studio mit mehreren Dateien 'token.cpp', die in unterschiedlichen Verzeichnissen stehen, nicht gut klar kommt. Vermutlich bildet es die Verzeichnis-Struktor bei den Objectsfiles nicht nach, womit ein token.o gebaut werden soll, aber schon ein token.o da ist, das aktueller als der zu kompilierende token.cpp-Quelltext ist - weshalb er ignoriert wird.

Werde ich heute abend mal überprüfen...
Das wäre einmal interessant zu wissen. Bei meinem aktuellen Projekt habe ich das nämlich auch, aber bisher habe ich es noch nicht riskiert mit Visual Studio zu kompilieren.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Visual C++: Quelltext ignoriert => Linkerfehler

Beitrag von Xin » Mo Sep 28, 2009 10:35 pm

Der Fehler war wie vermutet, dass es das File token.cpp in verschiedenen Verzeichnissen gab. Kompiliert wurde immer das Token als Basisklasse für Suchtoken (ein String, der optimiert in einem Text gesucht werden soll), dafür wurde das Token beim Compiler (das Token als Schlüsselwort) ignoriert.

Man kann in Visual Studio allerdings dem Objektfile einen Namen zukommen lassen. Hier kann man manuel auch den Verzeichnis-Baum nachbilden. Ich habe jetzt das Token (des Strings) nach token_string.obj kompilieren lassen. Wichtig ist .obj, nicht .o, sonst kompiliert der Compiler zwar brav nach token_string.o, aber der Linker findet token_string.obj nicht und meckert wieder... Dass ich token_string.o als Objektfile eingegeben habe, interessiert den Linker nicht, der nimmt wohl alles hinter dem Punkt wieder weg, um dann .obj hinzu zu fügen. Eigentlich typische Microsoft-Logik - warum den User fragen, wenn man es eh besser weiß!?

Mein Compiler lässt sich jetzt auch per Visual Studio kompilieren.

Die meisten Warnings belaufen sich auf Casting-Fehler, zum Beispiel auf sowas

Code: Alles auswählen

char * value = "content";
bool contentAvailable = bool( value );
Diese Passagen castet Visual C++ nicht ohne Gemecker, obwohl ich den Cast ausdrücklich angeordnet habe.
Nach einem Vergleich gibt er Ruhe:

Code: Alles auswählen

char * value = "content";
bool contentAvailable = value != NULL;
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten