Wie füge ich einen Pfad zu Bibliotheken in g ++ ein?


95

Ich versuche, den Pfad zu zusätzlichen Bibliotheken in mein Makefile aufzunehmen, kann aber nicht herausfinden, wie der Compiler diesen Pfad verwenden kann. Bisher habe ich:

g++ -g -Wall testing.cpp fileparameters.cpp main.cpp -o test

und ich möchte den Pfad zu aufnehmen

/data[...]/lib

weil testing.cpp Dateien aus dieser Bibliothek enthält. Außerdem bin ich auf einem Linux-Rechner.

BEARBEITEN: Kein Pfad zu einer Bibliothek. Nur zu Dateien, die enthalten waren. Mein Fehler.


Antworten:


167

Um ein Verzeichnis für die Suche nach (binären) Bibliotheken anzugeben, verwenden Sie einfach -L:

-L/data[...]/lib

Um den tatsächlichen Bibliotheksnamen anzugeben, verwenden Sie -l:

-lfoo  # (links libfoo.a or libfoo.so)

So geben Sie ein Verzeichnis an, in dem nach Include- Dateien gesucht werden soll (anders als in Bibliotheken!) -I:

-I/data[...]/lib

Also denke ich, was du willst, ist so etwas wie

g++ -g -Wall -I/data[...]/lib testing.cpp fileparameters.cpp main.cpp -o test

3
Grundsätzlich irgendwo, bevor es gebraucht wird; Das -Isollte zum Beispiel vor den .cpp-Dateinamen stehen.
Ernest Friedman-Hill

1
Ist es möglich, dass der Compiler dies herausfindet, indem er die Bibliothek einer Systemvariablen hinzufügt?
Fred

5
@Fred, ja, g ++ versteht eine ganze Reihe von Umgebungsvariablen, die verwendet werden können, um den Include-Pfad, den Bibliothekspfad usw. zu steuern.
Ernest Friedman-Hill

1
Was ist der Unterschied zwischen -L und -I (Kapital i, nicht niedrigeres L)?
Youda008

1
@ Youda008 Capital ell: Suchpfad für Bibliotheken. Großes Auge: Suchpfad für Include-Dateien. Kleine Ell: Name der zu verknüpfenden Bibliothek.
Ernest Friedman-Hill

1

In Ihrer MakeFile- oder CMakeLists.txt-Datei können Sie CMAKE_CXX_FLAGS wie folgt festlegen:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/path/to/your/folder")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.