Jak dołączyć ścieżkę do bibliotek w g ++


96

Próbuję dołączyć ścieżkę do dodatkowych bibliotek w moim pliku makefile, ale nie mogę dowiedzieć się, jak zmusić kompilator do korzystania z tej ścieżki. do tej pory mam:

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

i chcę dołączyć ścieżkę do

/data[...]/lib

ponieważ testing.cpp zawiera pliki z tej biblioteki. Poza tym pracuję na komputerze z systemem Linux.

EDYCJA: To nie jest ścieżka do biblioteki. Tylko do załączonych plików. Mój błąd.


Odpowiedzi:


169

Aby określić katalog do wyszukiwania bibliotek (binarnych), wystarczy użyć -L:

-L/data[...]/lib

Aby określić rzeczywistą nazwę biblioteki, użyj -l:

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

Aby określić katalog do wyszukiwania plików dołączanych (inny niż biblioteki!), Użyj -I:

-I/data[...]/lib

Więc myślę, że to, czego chcesz, to coś takiego

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

Te flagi kompilatora (między innymi) można również znaleźć w podręczniku Opcje poleceń GNU GCC:


4
Zasadniczo gdzieś, zanim będzie potrzebne; na przykład -Ipowinien znajdować się przed nazwami plików .cpp.
Ernest Friedman-Hill

1
Czy jest możliwe, aby kompilator to obliczył, na przykład dodając bibliotekę do zmiennej systemowej?
Fred

5
@Fred, tak, g ++ rozumie całą masę zmiennych środowiskowych, których można użyć do sterowania ścieżką dołączania, ścieżką biblioteki itp.
Ernest Friedman-Hill

1
jaka jest różnica między -L a -I (duże i, a nie niższe L)?
Youda008

1
@ Youda008 Capital ell: ścieżka wyszukiwania bibliotek. Duże oko: ścieżka wyszukiwania plików dołączanych. Mały łokieć: nazwa biblioteki do połączenia.
Ernest Friedman-Hill

2

W MakeFile lub CMakeLists.txt możesz ustawić CMAKE_CXX_FLAGS jak poniżej:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/path/to/your/folder")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.