Ladda in library C++ från GitHub in CodeBlocks

Permalänk
Medlem

Ladda in library C++ från GitHub in CodeBlocks

Jag har precis börjat med C++ (har tidigare jobbat i VB, C#, R, MatLab ect, så är ny med språket - men inte med programmering).

Det första jag behöver göra är att läsa in en Excel-fil i C++ på något sätt. För att komma igång med detta testade jag att ladda hem detta från GitHub: https://github.com/troldal/OpenXLSX

Problemet är bara att jag inte riktigt förstår hur jag ska kunna använda det i C++. Jag testade exempelkoden nedan, men när jag bygger ihop programmet fastnar den på

//#include <OpenXLSX/OpenXLSX.h>

. Frågan är alltså hur jag "importerar"/laddar in ett library till C++? Jag har såklart googlat - men ändå inte fattat hur det går till och fått det att funka. Kan någon hjälpa mig och förklara? Förmodligen basic, men efter ett par timmar med dumstruten på känner jag att jag skulle behöva lite hjälp...

Jag använder just nu CodeBlocks för att knacka kod i.

------

#include <iostream> #include <iomanip> #include <OpenXLSX/OpenXLSX.h> using namespace std; using namespace OpenXLSX; /* * TODO: Sheet iterator * TODO: Handling of named ranges * TODO: Column/Row iterators * TODO: correct copy/move operations for all classes * TODO: Find a way to handle overwriting of shared formulas. * TODO: Handling of Cell formatting * TODO: Handle chartsheets * TODO: Update formulas when changing Sheet Name. * TODO: Get vector for a Row or Column. * TODO: Conditional formatting */ int main() { XLDocument doc; doc.CreateDocument("./MyTest.xlsx"); auto wks = doc.Workbook().Worksheet("Sheet1"); wks.Cell("A1").Value() = 3.14159; wks.Cell("B1").Value() = 42; wks.Cell("C1").Value() = "Hello OpenXLSX!"; wks.Cell("D1").Value() = true; wks.Cell("E1").Value() = wks.Cell("C1").Value(); auto A1 = wks.Cell("A1").Value().Get<double>(); auto B1 = wks.Cell("B1").Value().Get<unsigned int>(); auto C1 = wks.Cell("C1").Value().Get<std::string>(); auto D1 = wks.Cell("D1").Value().Get<bool>(); auto E1 = wks.Cell("E1").Value().Get<std::string>(); auto val = wks.Cell("E1").Value(); cout << val.Get<std::string>() << endl; cout << "Cell A1: " << A1 << endl; cout << "Cell B1: " << B1 << endl; cout << "Cell C1: " << C1 << endl; cout << "Cell D1: " << D1 << endl; cout << "Cell E1: " << E1 << endl; doc.SaveDocument(); return 0; }

Permalänk
99:e percentilen

Använd [code] när du klistrar in kod. Exempel:

[code]
#include <iostream>
[/code]

Om du inte tycker det är fantastiskt kul att skriva BBCode manuellt hjälper Better SweClockers dig med det.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

@Alling: Tack, ändrat! Hittade inget på sidan så var osäker på vilken som var koden. Ska kika på länken du skickade

Permalänk
Medlem

Jag är inte jätteduktig på C++ men tänker att biblioteket behöver kompileras eller länkas?
https://www.bogotobogo.com/cplusplus/libraries.php
https://stackoverflow.com/questions/10358745/how-to-use-libra...

Eftersom du har källkoden till biblioteket borde det gå att kompilera det tillsammans med ditt program.

Permalänk
Medlem

Kanske, ska kika på det tack! Håller på att försöka lära mig C++ till jobbet. Lite tyngre än de andra språken jag är van vid - men liknande princip.

Permalänk
Medlem

Obs: Jag vet inte riktigt vad CodeBlocks gör, och hur det interagerar med kompilering och byggsystem.

Du bör läsa på om länkning i ovan länkade poster eller dyl., men här ett simpelt exempel med en binär som länkar med ett statiskt bibliotek, om det kanske hjälper.

Våra mappar och filer. Vi har ett bibliotek foo med tillhörande headerfil "foo.h" och statiskta biblioteksfil "libfoo.a".

. ├── foo │   ├── include │   │   └── foo.h │   └── lib │   └── libfoo.a ├── Makefile └── src └── main.c

Filernas innehåll:

foo.h

void cool_function();

main.c

#include "foo.h" int main(int argc, char** argv) { cool_function(); return 0; }

Makefile

default_target: main.bin main.bin: src/main.c foo/lib/libfoo.a foo/include/foo.h gcc -Ifoo/include -Lfoo/lib -o main.bin src/main.c -lfoo

Vi kan bygga projektet med make och köra den resulterande binären med ./main.bin.

$ make gcc -Ifoo/include -Lfoo/lib -o main.bin src/main.c -lfoo $ ls foo main.bin Makefile src $ ./main.bin Hello, World!

Den mest intressanta delen av det här projektet är ju såklart gcc kommandot i makefilen: gcc -Ifoo/include -Lfoo/lib -o main.bin src/main.c -lfoo. Beskrivning av dess komponenter:

-Ifoo/include: Inkludera mappen "./foo/include/" i sökningen när en header-fil laddas in med "#include" direktivet i en ".c" fil, e.g. "#include <foo.h>".

-Lfoo/lib: Inkludera mappen "./foo/lib/" i sökningen när ett bibliotek laddas in i gcc med "-l" flaggan, e.g. "gcc ... -lfoo".

-lfoo: Ladda in / länka med biblioteket "foo", vilket är en "genväg" man traditionellt använder så man slipper skriva med "lib*.a" biten. Man hade alternativt kunnat skriva bibliotekets fulla filnamn med varianten -l:libfoo.a.

Edit: Du bör också överväga att använda mer automatiska byggsystem än GNU Make, i vilket fall du lär kunna beskriva kompileringen simplare och mer deklarativt, utan att manuellt behöva bygga upp gcc kommandot. Jag använder inget själv, men Ninja, Gradle, och CMake är några alternativ jag hört.

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Medlem

Tack så mycket! Det där förklarar en del, ska kika på det med