#include: Linkerverzeichnisse bestimmen.
-
Hallo,
Ich habe Visual Studio 2022 und habe libjpeg-turbo-gcc64 gedownloaded. Habe jetzt also das Verzeichnis C:\libjpeg-turbo-gcc64 mit Unterverzeichnisse bin, classes, doc, include, lib, man.
Wie teile ich nun Visual Studio 2022 mit, dass auch diese includes zu berücksichtigen sind? Ich habe schon "C:\libjpeg-turbo-gcc64\include" im Projektmappen-Explorer-Eigenschaftenseiten dann dort unter Includeverzeichnis eingegeben.
Jetzt fehlen dem Linker aber die Verweise, er bekommt die externen Symbole nicht aufgelöst. Was muss ich bitte wo im Projektmappen-Explorer noch eintragen, damit auch der Linker alles findet? Danke im Voraus!
-
Hallo @amp-null-gt-Hallo
So aus der Erinnerung; dem Linker das bzw. die Verzeichnisse kenntlich machen und die Bibliothek/en einbinden (Dateien mit Extension "lib") und die entsprechenden Header "includen".
-
@amp-null-gt-Hallo sagte in #include: Linkerverzeichnisse bestimmen.:
libjpeg-turbo-gcc64
Gleich vorweg: Das wird sehr wahrscheinlich nicht mit Visual Studio funktionieren, da sich die Bibliotheken in diesem Paket nur in Form von
.a
-Archiven befinden. Mit denen kann der MSVC-Linker (link.exe
, der Linker von Visual Studio) nichts anfangen (falls sich da in der letzten Zeit nicht etwas überraschendes getan haben sollte).Du benötigst Bibliotheken für Visual Studio, das sind z.B. hier die
*-vc.exe
und*-vc64.exe
Dateien.Mit direkten Projektmappen-Einstellungen habe ich Ewigkeiten nicht mehr gearbeitet, da ich sowas alles mit CMake mache. Ich kann dir aber dazu ein paar generische Tips geben, die mit jedem Compiler funktionieren sollten:
Include-Verzeichnisse werden bei so ziemlich allen Compilern mit dem Kommandozeilenparameter
-I<verzeichnis>
hinzugefügt (beim MS-Compiler meist mit/I<verzeichnis>
, der versteht aber auch-
). Da müsste es in der IDE irgendwo eine Einstellung "Additional Include Directories" für das Projekt geben, mit denen diese Parameter zur Compiler-Kommandozeile hinzugefügt werden. Es empfiehlt sich, für das Verzeichnis eine der Variablen zu verwenden, die z.B. hier aufgelistet sind. Z.B. wäre$(ProjectDir)/3rdparty/libjpeg-turbo/include
eine simple Lösung für den Anfang und dann libjpeg-turbo in den Unterordner3rdparty/libjpeg-turbo
unterhalb deines Projektordners kopieren.Mit den Bibliothek-Dateien (
.lib
) verhält es sich ähnlich: Hier ist der Parameter für ein Bibliotheks-Suchverzeichnis-L<verzeichnis>
. In der IDE ist das wahrscheinlich eine Option, die "Library Search Paths" oder so ähnlich heißt. Der Eintrag sollte dann z.B. auf$(ProjectDir)/3rdparty/libjpeg-turbo/lib
verweisen.Dann musst du der IDE noch verklickern, dass die Bibliothek(en) dann auch tatsächlich gelinkt werden sollen. Dazu werden die
.lib
Dateien bei MSVC meines Wissens einfach nur an die Kommandozeile des Linkers angehängt (nach deiner Quellcodedatei oder der kompilierten Objektdatei, die diese Bibliothek verwendet - die Bibliotheksabhängigkeiten sollten in der Kommandozeile immer nach den Objektdateien oder Bibliotheken kommen, die auf diese Abhängigkeit angewiesen sind. Das ist manchmal z.B. bei Bibliotheken wichtig, die selbst wieder auf andere Bibliotheken angewiesen sind). In der IDE ist das wahrscheinlich "Additional Libraries" oder sowas. Der Compiler gibt diese Parameter üblicherweise an den Linker weiter und der sucht dann in den mit-L
angegebenen Bibliotheksverzeichnissen nach den genannten Dateien und linkt diese mit.