Installation och Användning av C++-bibliotek på Ubuntu

Permalänk
Medlem

Installation och Användning av C++-bibliotek på Ubuntu

Hej,

Jag undrar hur man på Ubuntu (22.04 LTS om det hjälper) installerar C++-tredjepartsbibliotek?

Min setup kommer likna vad som kan ses i de första ~20 minuterna av denna film:
C++ Tutorial for Beginners - Complete Guide to Programming in C++ using Visual Studio Code on Linux

Mitt antagande efter en del sökande är att man kör något i stil med:
”sudo apt install [name-of-library]”

Då jag ämnar att använda make-filer som i videon ovan antar jag att det är bra att veta hur jag ser till att g++ och make vet var biblioteksfilerna ligger.

Om någon känner till en lämplig guide eller vet hur jag bör göra uppskattar jag de tipsen.
Om det även täcker C++-bibliotek från t.ex. GitHub så är det en bonus.

Permalänk
Medlem

Mapparna du letar efter är /usr/lib och /usr/include, eller /usr/local/lib och /usr/local/include

Andra alternativet är att ha bibliotek som inte är lika vanliga eller unika lokalt i ditt projekt och definera dom i CMake eller make.

Jag tittade på https://www.youtube.com/watch?v=nlKcXPUJGwA för att lära mig CMake tror du får reda på det mesta, det räckte i alla fall för att komma igång med mitt examensprojekt.

Permalänk
Medlem
Skrivet av Apollo11:

Mitt antagande efter en del sökande är att man kör något i stil med:
”sudo apt install [name-of-library]”

Då jag ämnar att använda make-filer som i videon ovan antar jag att det är bra att veta hur jag ser till att g++ och make vet var biblioteksfilerna ligger.

Libbar som distributionen har kan mycket väl installeras så.

Tricket är att få till möjlighet för andra människor att kunna kompilera ditt program på sitt system (eventuellt annan dist/annat POSIX-OS) givet din Makefile. Med andra ord: Man ska inte uppfinna för mycket på egen hand och inte förutsätta för mycket om var saker är installerat. Det är länkaren, ld, som tar hand om att hitta var libbarna finns och den använder en viss logik för det.

Man-sidorna för ld(1), ldd(1), ldconfig(1) och ld.so(8) är intressanta att läsa, titta särskilt på -l och -L för ld.

I nuläget är det överkurs, men det kan även vara bra att veta om existensen av automake och autoconf. Vad händer i första steget när man installerar ett program eller bibliotek från källkod med:

./configure make make install

?

Du behöver inga guider. Allt du behöver finns i man-sidor och info-sidor.

Permalänk
Medlem
Skrivet av swesen:

Mapparna du letar efter är /usr/lib och /usr/include, eller /usr/local/lib och /usr/local/include
https://net2.com/wp-content/uploads/2019/08/ffafeb59qra31.jpg

Andra alternativet är att ha bibliotek som inte är lika vanliga eller unika lokalt i ditt projekt och definera dom i CMake eller make.

Jag tittade på https://www.youtube.com/watch?v=nlKcXPUJGwA för att lära mig CMake tror du får reda på det mesta, det räckte i alla fall för att komma igång med mitt examensprojekt.

Så om jag förstår rätt:
Om jag installerar ett paket med ”sudo apt install [name-of-library]” är det bara att skriva ”#include <name-of-library>”?

Permalänk
Medlem
Skrivet av Apollo11:

Så om jag förstår rätt:
Om jag installerar ett paket med ”sudo apt install [name-of-library]” är det bara att skriva ”#include <name-of-library>”?

Om headerfilerna ligger i mapparna som du inkluderar i projektet så skriver du

#include "foo.h"

men om de hamnar i en egen mapp t.ex. i "/usr/include/foo" så blir det

#include "foo/foo.h"

/usr/include och /usr/local/include mapparna inkluderas automatiskt.

Permalänk
Datavetare
Skrivet av Apollo11:

Så om jag förstår rätt:
Om jag installerar ett paket med ”sudo apt install [name-of-library]” är det bara att skriva ”#include <name-of-library>”?

Normalt sätt är det bara göra det du skriver ovan för bibliotek installerade med "apt". Det löser kompileringssteget, men inte länksteget.

Finns flera sätt att lösa länkningen, ett "halvautomatiskt" är att använda sig av "pkg-config" då de flesta bibliotek du installerar med "apt" kommer vara integrerade med det verktyget.

Kan vara så att du först måste installer pkg-config

$ sudo apt install pkg-config

Sen kan man göra något åt detta hållet. OBS: har rätt dålig koll på Makefiler, föredrar att använda saker som CMake eller liknande, men det fungerar i alla fall...

"pkg-config" kommer se till att rätt flaggor skickas till kompilering och länkning för att använda de bibliotek listande som "ADDED_LIBS" nedan

# User defined values APP_NAME = foo ADDED_LIBS = zlib CPP_FILES := $(wildcard *.cpp) # Computed values OBJ_FILES := $(patsubst %.cpp,%.o,$(CPP_FILES)) ADDED_CFLAGS := $(shell pkg-config --cflags $(ADDED_LIBS)) ADDED_LDFLAGS := $(shell pkg-config --libs $(ADDED_LIBS)) # Build rules $(APP_NAME): $(OBJ_FILES) $(CXX) $(ADDED_LDFLAGS) $(LDFLAGS) -o $@ $< %.o: %.cpp $(CXX) -c $(ADDED_CFLAGS) $(CFLAGS) -o $@ $< clean: rm -f *.o $(APP_NAME)

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer