Biblioteka xlnt do Excel

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

0

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

moje kroki

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.

0

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

#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".

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:

g++ test.cpp -lxlnt

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

g++ test.cpp -LSCIEZKA -lxlnt

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

% 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ę:

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1