Einbinden von Dateien aus anderen Projekten der gleichen Solution
-
Hallo,
Ich stehe gerade mal wieder voellig auf dem Schlauch, scheint mir. Kann mir jemand sagen, wie ich in Visual Studio 2005 in Projekt A von Solution A Dateien aus Projekt B von der gleichen Solution A einbinde?
Konkret habe ich in Projekt B diverse Helper-Klassen zum Strings auseinanderschnippeln, Daten in einem bestimmten Format ueber TCP/IP verschicken/empfangen etc., die ich in mehreren Projekten wiederverwenden moechte und deswegen ausgelagert habe.
Projekt A ist das Startprojekt. Ich hatte jetzt in Projekt A eine Datei aus Projekt B mit #include "../ProjektB/meineKlasse.h" eingebunden, weil das auf Anhieb so aussah, als wuerde es funktionieren. Das Projekt compiliert so auch, aber der Linker findet die Funktionen aus meineKlasse.h nicht. Ich vermute, meine Vorgehensweise war also schon im Ansatz nicht korrekt. Wie macht man's richtig?Vielen Dank und viele Gruesse,
Anja
-
Weil Du auch die Objekt Dateien haben musst.
Besser: Erzeuge eine statische Lib. Binde dies entsprechenden Header ein und fügr die LIB in das Projekt.
-
Martin Richter schrieb:
Weil Du auch die Objekt Dateien haben musst.
Besser: Erzeuge eine statische Lib. Binde dies entsprechenden Header ein und fügr die LIB in das Projekt.
Das die Objektdateien nicht gefunden werden ist schon klar. Die Frage ist, kann ich den Compiler irgendwie dazu bringen, die Dateien im Verzeichnis von Projekt A abzulegen, oder alternativ den Linker dazu, sie im Verzeichnis von Projekt B zu finden (ausser ueber die globalen Einstellungen, vorzugsweise in den Einstellungen fuer Projekt A, wenn's sein muss, auch in den Einstellungen fuer die komplette Solution)
Die Idee mit der statischen Lib ist natuerlich auch nicht schlecht, aber kann ich die Lib beim Compilieren meines Projektes automatisch mit compilieren und gleich dazulinken lassen? Sorry, falls das 'ne daemliche Frage sein sollte, so richtig habe ich mich an das Visual Studio immernoch nicht gewoehnt.
Ich weiss, dass ich in einem anderen Projekt schonmal genau meinen Anwendungsfall gesehen habe - also eine Solution und ein Startprojekt, dass diverse andere Projekte verwendet und automatisch die neu compiliert, die sich geaendert haben. Leider weiss ich nicht, wie das dort geloest war...
-
Es macht in meinen Augen keinen Sinn Objekt Dateien ohne LIB einzubinden.
Dann füge doch einfach die Cpp Dateien zusätzlich in das zweite Projekt ein.
Dann hast Du auch keine Scherereien mit den Compiler Settings.
Mit Abhängigkeiten bekommst Du das hin aber es ist IMHO Suboptimla.Ein Lib Projket zusätzlich in die Solution eingefügt kann natürlich auch automatisch kompiliert werden bevor sie in ein Projekt eingefügt wird.
Abhängigkeiten regeln das...
-
Danke fuer Deine Antwort! Das mit den Abhaengigkeiten habe ich mir angesehen. irgendwie funktioniert es trotzdem noch nicht, obwohl ich die Objektdateien jetzt im richtigen Verzeichnis habe.
Der Fehler ist immernoch der Gleiche z.B.:
TextfileInput.obj : error LNK2019: unresolved external symbol "public: __thiscall StringParsing::~StringParsing(void)" (??1StringParsing@@QAE@XZ) referenced in function "public: struct entry __thiscall TextfileInput::processLine(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?processLine@TextfileInput@@QAE?AUentry@@V?char_traits@D@std@@V?$allocator@D@2@@std@@@Z)Martin Richter schrieb:
Es macht in meinen Augen keinen Sinn Objekt Dateien ohne LIB einzubinden.
Dann füge doch einfach die Cpp Dateien zusätzlich in das zweite Projekt ein.
Dann hast Du auch keine Scherereien mit den Compiler Settings.Wenn ich die Cpp-Dateien zusaetzlich in das zweite Projekt einfuege habe ich aber das gleiche Problem, wenn ich auf die Helper-Dateien aus Projekt C oder Projekt D zugreifen will, oder ich muss die Dateien dort auch einfuegen.
Vielleicht passt meine Grundidee einfach nicht. Ich habe ein Hauptprojekt, Projekt A, das verschiedene Teilaufgaben erledigen muss, wie z.B. Ansteuerung eines Roboters, Aufnahme von Video und Audiodaten von der Interaktion mit dem Benutzer etc, Verwalten von gelerntem Wissen usw. Ich hatte bisher alle Klassen voellig unuebersichtlich in diesem Projekt A abgelegt und mich gestern, weil man so langsam nicht mehr durchblickt, mal drangesetzt, das Ganze in verschiedene Projekte auseinanderzuziehen, die, wenn man sie als Startprojekt setzt, eine eigene kleine Konsolenapplikation haben, so dass man z.B. unabhaengig vom Rest der Applikation die Aufnahmefunktionen oder die Lernalgorithmen testen kann. Fuer mich klingt das ganz praktisch, das Problem ist eben, siehe oben, dass es nicht funktioniert. Sollte man zum Strukturieren einer Solution besser irgendwas anderes machen, als die Klassendateien auf einzelne Projekte zu verteilen? Ich komme eigentlich aus der Java-Ecke, und da wuerde ich fuer sowas Packages verwenden. Haette vermutet, dass das in VC++ durch die Projekte geloest wird. Falls ich da falsch liege, wuerde mir ein Hinweis in die richtige Richtung weiterhelfen.
Ein Lib Projket zusätzlich in die Solution eingefügt kann natürlich auch automatisch kompiliert werden bevor sie in ein Projekt eingefügt wird.
Abhängigkeiten regeln das...Das werde ich mir jetzt mal genauer ansehen. Wahrscheinlich ist das wirklich die sauberste Loesung, wobei die Moeglichkeit, nur durch Umschalten des Startprojektes die verschiedenen Teilbereiche zu testen, dann vermutlich verloren geht.
-
Die Fehlermeldungen sagen Dir doch welceh Funktionen fehlen.
Da sind immer noch nicht alle CPP Dateien dfrin.Grundsätzlich halte ich aber Dein Verfahren für unübersichtlich.
Ich habe für solche Fälle eher, die Share Funktion von VSS verwendet.Wenn Du Objekt Dateien sharen willst, dann solltest Du eine statische LIB bauen punkt...
Ansonsten steht es Dir frei die Sourcedateien aus einem gemeinsamen Verzeichnis in Deine Projekte einzufügen.
Wenn Du ein Projekt in eizelne Funktionsbereiche aufteilen willst, dann bau doch lieber einzelne feste DLLsmit fester Aufgabe und Interface...
-
Martin Richter schrieb:
Die Fehlermeldungen sagen Dir doch welceh Funktionen fehlen.
Da sind immer noch nicht alle CPP Dateien dfrin.Ja ich weiss - das sind die gleichen Funktionen, wie vorher - ich verstehe nur nicht, warum.
- die Datei, wo diese Funktionen drin sind wird nicht dazugelinkt, obwohl sie ordnungsgemaess compiliert und die Objektdatei mittlerweile auch im korrekten Verzeichnis abgelegt wird...
Ich glaube, ich geb's auf und versuche es mit einem der von Dir beschriebenen Wege. Die Arbeit, die ich mir jetzt mache, um eine saubere Loesung zu implementieren, zahlt sich spaeter in jedem Fall aus.
Danke auf jeden Fall fuer die Hilfe.
Diese Share-Funktion vom VSS sehe ich mir nochmal an, aber es wird wohl auf die von Dir empfohlenen statischen Libs oder DLLs hinauslaufen.
-
Danke nochmal... mit statischen Libs klappt es auf Anhieb...
