Wie können Sie Funktionen aus verschiedenen C ++ - Projekten in Visual Studio 2010 verwenden?

8

Ich möchte zwei C ++ - Projekte in derselben Lösung in Visual Studio 2010 erstellen, die miteinander interagieren können. Ich habe eine Lösung im Verzeichnis C:\Users\me\Desktop\SolutionDir erstellt. Die beiden Projekte wurden jeweils unter C:\Users\me\Desktop\SolutionDir\FirstProject und C:\Users\me\Desktop\SolutionDir\SecondProject erstellt.

Mein erstes Projekt enthält zwei Dateien, einen Header function.h und eine cpp Datei function.cpp

function.h

%Vor%

function.cpp

%Vor%

Mein zweites Projekt enthält die Hauptdatei main.cpp

main.cpp

%Vor%

Ich habe das Verzeichnis C:\Users\me\Desktop\SolutionDir\ in meinem SecondProject Configuration Properties > C/C++ > General > Additional Include Directories hinzugefügt. Ich bekomme immer noch den klassischen Fehler: error LNK2019: unresolved external symbol beim Aufruf der Funktion print_stuff() .

Irgendwelche Ideen?

    
vanna 03.05.2012, 20:21
quelle

3 Antworten

7

Versuchen Sie, das erste Projekt als statische Bibliothek unter Projekteigenschaften / Konfigurationseigenschaften / Allgemein / Konfigurationstyp zu erstellen.

Dann müssen Sie in Ihren Projekteigenschaften für das zweite Projekt zwei Dinge ändern:

  1. In Linker / Allgemein müssen Sie möglicherweise den Ordner "Zusätzliche Bibliotheksverzeichnisse" hinzufügen, in dem das .lib des ersten Projekts erstellt wird.
  2. In Linker / Input müssen Sie den Namen der .lib -Datei wie FirstProject.lib oder wie auch immer der Name lautet, zu zusätzlichen Abhängigkeiten hinzufügen.
Chris A. 03.05.2012, 20:28
quelle
3

Ja, Sie müssen die Funktionen mit _declspec(dllexport) exportieren und sie in das Projekt importieren, das die Funktionen mit _declspec(dllimport) aufruft.

Diese Dualität wird normalerweise mit einem Makro erreicht:

%Vor%

In der Konfiguration Ihres ersten Projekts fügen Sie FIRST_PROJECT_BUILD zu Ihren Präprozessordirektiven hinzu. Wenn Sie das erste Projekt kompilieren, teilen Sie dem Compiler mit, dass die Funktion exportiert werden soll. Wenn Sie die Datei jedoch in ein anderes Projekt einfügen, für das FIRST_PROJECT_BUILD nicht definiert ist, teilen Sie dem Compiler mit, dass die Funktion in einer anderen Bibliothek implementiert ist und importiert werden sollte.

Zusätzlich zu den zusätzlichen Include-Pfaden müssen Sie die generierten .lib -Dateien aus den Projekten, die die Funktionen implementieren, zur Registerkarte Extra dependencies in den Liner-Einstellungen Ihrer Projektkonfiguration hinzufügen.

    
Luchian Grigore 03.05.2012 20:27
quelle
0

Sie können einen RealPath für Ihr Include-Verzeichnis einschließen! Wie für Ihr FirstProject enthalten "./../" Und das gleiche gilt für Ihr zweites Projekt wie dieses können Sie Ihr Verzeichnis SolutionDir verschieben oder kopieren und es wird immer funktionieren!

Für Ihre ungelösten Links müssen Sie die function.cpp und function.h in Ihrem ersten und zweiten Projekt hinzufügen Sie können es in SolutionDir platzieren! So haben Sie immer zwei Dateien für Ihr erstes und zweites Projekt statt vier!

Ich hoffe, es hilft!

    
kavaliero 03.05.2012 20:31
quelle