Da das Einbinden von externen Libraries mit C++ und Visual Studio eigentlich ziemlich simpel ist, jedoch fast nirgends gut erklärt wird, werde ich mich einmal daran versuchen ;)
Besonders in der Spieleentwicklung, aber auch im normalen Alltag eines C++-Programmierers wird dieser Prozess oftmals benötigt. In diesem Beispiel werde ich dies anhand der FreeImage-Library für das Laden von Bildern und Texturen erklären. Diese liefert sowohl eine statische (lib) und eine dynamische Library (dll) als auch ein Headerfile. Allesamt müssen für unser Projekt eingebunden werden, um die Funktionalität zu nutzen.
In den Projektordner damit
Wichtig ist, dass die entpackten Dateien immer im Projektordner anzufinden sind. Denn sollte das Projekt einmal unkompiliert auf einen anderen Rechner verschoben werden, so wären die ganzen Verlinkungen zu den Libraries in den Systemordnern fort.
Also, zunächst wird einmal FreeImage (unter FreeImage DLL) heruntergeladen und anschließend entpackt. Dort befindet sich ein Ordner namens „Dist“, in dem ihr die .lib, .dll und .h findet.
Für diese Files legt ihr nun in eurem Projektordner, wo sich all eure .cpp-Dateien befinden, zwei Ordner an: „lib“ und „include“. In den lib-Ordner verschiebt ihr logischerweise die FreeImage.lib und in den include-Ordner die FreeImage.h. Die FreeImage.dll könnt ihr entweder zu euren .cpp-Files oder zur .exe ins Debug- bzw. Release-Verzeichnis legen. Am Ende sollte dies wie auf dem folgenden Screenshot aussehen:
Das lib-Verzeichnis ins Projekt einbinden
Damit der Linker auf die Bibliothek zugreifen kann, muss diese in den Eigenschaften des Projekts eingetragen werden. Dies kann teilweise auch direkt im Code passieren, aber konzentrieren wir uns fürs erste lieber darauf, dass es überhaupt läuft ;)
Zunächst öffnet ihr euer C++-Projekt mit Visual Studio 2010. Mit Rechtsklick auf das Projekt im Projektmappen-Explorer gelangt ihr zu den Eigenschaften. Ihr habt nun zwei Möglichkeiten, um Visual Studio den Pfad zu euren Libraries mitzuteilen.
1. Ins VC++-Verzeichnis eintragen
Dieser Lösungsweg verändert die Systempfade in denen VC++ nach Libraries sucht. Geht hierfür zu Konfigurationseigenschaften > VC++-Verzeichnisse. Dort geht nur nun bei Bibliotheksverzeichnisse auf „Bearbeiten“, fügt eine neue Zeile hinzu und gebt den Pfad zum lib-Ordner in eurem Projekt an.
2. In den Linkereigenschaften eintragen
Dieser Lösungsweg bearbeitet direkt den Linker für die Projektinstanz. Geht hierfür zu Konfigurationseigenschaften > Linker > Allgemein. Hier geht ihr nun genauso bei „Zusätzliche Bibliotheksverzeichnisse“ auf „Bearbeiten“, fügt eine neue Zeile hinzu und gebt den Pfad zum lib-Ordner in eurem Projekt an.
Die FreeImage.lib selbst ins Projekt einbinden
In beiden Fällen müsst ihr nun noch die FreeImage.lib selbst einbinden. Dies geschieht unter Konfigurationseigenschaften > Linker > Eingabe. Hier geht ihr jetzt bei „Zusätzliche Abhängigkeiten“ auf „Bearbeiten“ und fügt pro Zeile den Verweis auf die .lib-Datei selbst an den vorher angegeben Pfaden hinzu:
Headerfile FreeImage.h einbinden
Im Prinzip braucht ihr dazu einfach nur mehr folgendes in der entsprechenden Datei zu schreiben:
#include "include/FreeImage.h"
Jedoch geht es auch schöner, so dass ihr direkt einen Verweis im Projekt setzt und die Header-Datei wie einen Systemheader aufrufen könnt:
#include <FreeImage.h>
Genauso wie bei der Library gibt es hierfür wieder zwei Möglichkeiten.
1. Abermals ins VC++-Verzeichnis eintragen
Geht hierfür zu Konfigurationseigenschaften > VC++-Verzeichnisse. Dort geht nur nun bei Includeverzeichnisse auf „Bearbeiten“, fügt eine neue Zeile hinzu und gebt den Pfad zum include-Ordner in eurem Projekt an.
2. Den C/C++-Einstellungen zeigen wo es lang geht
Dieser beschäftigt sich wieder mit der Projektinstanz selbst. Geht hierfür zu Konfigurationseigenschaften > C/C++ > Allgemein. Hier geht ihr nun bei „Zusätzliche Includeverzeichnisse“ auf „Bearbeiten“, fügt eine neue Zeile hinzu und gebt den Pfad zum include-Ordner in eurem Projekt an.
Wie bereits erwähnt, könnt ihr danach die FreeImage.h folgendermaßen ins ensprechende File einbinden:
#include <FreeImage.h>
Kommentare