Biblioteka xlnt do Excel

Biblioteka xlnt do Excel
PapiVPG
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 3 lata
  • Postów:15
0

Witam
Mam problem z kompilacją programu z użyciem tej biblioteki na ubuntu 20.04. Wyskakuje mi błąd z niezdefiniowanymi referencjami i nie jestem pewien w czym problem, a tym bardziej jak go rozwiązać. Poniżej załączam bibliotekę i sposób w jaki ją zainstalowałem.

https://github.com/tfussell/xlnt

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install cmake
sudo apt-get install zlibc

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt-get upgrade
sudo apt-get install gcc-6 g++-6
export CC=/usr/bin/gcc-6
export CXX=/usr/bin/g++-6

zamiast 6 zainstalowałem gcc-7 i g++8. Bo gcc-6 g++-6 nie mogłem zainstalować. Czy to duża różnica?

cd ~
unzip Downloads/xlnt-master.zip
cd xlnt-master
cmake .
make -j 2
sudo make install

sudo ldconfig

https://tfussell.gitbooks.io/xlnt/content/docs/introduction/Installation.html

Po napisaniu przykładowego kodu w VS code mam taki błąd:
screenshot-20201120203305.png

Jeśli ktoś wie jak odpalić bibliotekę w innym środowisku np. w CodeBlocks na Windowsie to też będę wdzięczny. Pozdrawiam

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Szczecin
0

Dlaczego w ogóle jakieś archiwalne gcc odkopaleś? właśnie sprawdziłem na gcc 10 i spokojnie się skompilowało.

moje kroki

Kopiuj
git clone https://github.com/tfussell/xlnt.git
mkdir build-xlnt && cd build-xlnt
cmake ../xlnt
cmake --build . -j

I tyle, potem możesz się bawić w install/ldconfigi.

Ale pokaż lepiej jak budujesz przykładowy kod, bo pewnie tam masz problem.


PapiVPG
przykładowy kod jest z githuba. Jak on mi nie działał to za nic innego się nie brałem
PapiVPG
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 3 lata
  • Postów:15
0

Kod wklejam do VS code i zapisuję jako test.cpp

Kopiuj
#include <xlnt/xlnt.hpp>

int main()
{
    xlnt::workbook wb;
    xlnt::worksheet ws = wb.active_sheet();
    ws.cell("A1").value(5);
    ws.cell("B2").value("string data");
    ws.cell("C3").formula("=RAND()");
    ws.merge_cells("C3:C4");
    ws.freeze_panes("B2");
    wb.save("example.xlsx");
    return 0;
}

Otwieram konsole w folderze, w którym zapisany jest plik test.cpp i wpisuje w niej gcc test.cpp i dostaję komunikat ze screena, którego załączyłem wcześniej "undefined reference".

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Szczecin
1

Musisz linkować do tej biblioteki. Ponadto to jest C++, a nie C, użyj odpowiedniego kompilatora. Zależnie gdzie masz libxlnt.so, spróbuj:

Kopiuj
g++ test.cpp -lxlnt

Jeśli nie znajdzie, musisz uzupełnić ścieżkę linkowania albo zainstalować bibliotekę w systemie. To pierwsze jest mniej inwazyjne:

Kopiuj
g++ test.cpp -LSCIEZKA -lxlnt

gdzie SCIEZKA to np. /home/krzaq/code/temp/build/source, czyli np:

Kopiuj
% pwd
/home/krzaq/code/temp/build/source
% ls libxlnt.so
libxlnt.so
% cd test_cpp_dir
g++ test.cpp -L/home/krzaq/code/temp/build/source -lxlnt

Przykładowo u mnie, budując w katalogu w którym budowałem libkę:

Kopiuj
g++ temp.cpp -Lsource -lxlnt -I../xlnt/include

edytowany 1x, ostatnio: kq
PapiVPG
Jestem bardzo wdzięczny Panu. Wcześniej próbowałem kompilować z dyrektywą -i, lecz nie wychodziło. Pewnie z tym linkerem jak Pan wspomniał było coś nie tak. Mimo wszystko zrozumiałem w czym tkwił problem i na przyszłość będę wiedział jak poradzić sobie z tym. Pozdrawiam!!
kq
Nie ma problemu

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.