УНИТе

Портал > Документация > Компилиране, инсталиране и използване на Blosc под CentOS 7 и 8

Компилиране, инсталиране и използване на Blosc под CentOS 7 и 8

Съдържание:

  1. Предварителна информация
  2. Изтегляне на изходния код и компилирането му с Intel Compilers и PGI Compilers
  3. Динамично свързване на компилираната библиотека към C/C++ и Fortran приложения

 

1. Предварителна информация

Blosc е високоефективен компресор, специално оптимизиран за компресия на данни записани в двоичен формат. Целта на този документ е да предложи рецепта за изграждане на версия на libblosc библиотеката чрез GNU Compilers.

 

2. Изтегляне на изходния код и компилирането му с GNU Compilers

Преди да пристъпите към изтегляне и компилиране на кода, трябва да инсталирате нужните за целта компилатори и помощни библиотеки:

  • CentOS 7

    $ sudo yum install cmake3 gcc gcc-c++ libstdc++ zlib-devel glibc-headers kernel-headers
  • CentOS 8

    $ sudo dnf install cmake3 gcc gcc-c++ libstdc++ zlib-devel glibc-headers kernel-headers

Библиотеката ZSTD, която се използва като зависимост при компилирането, може да компилирате и инсталирате (ако това не е вече направено), използвайки инструкциите в документа "Компилиране, инсталиране и използване на Zstandard (ZSTD) под CentOS 7 и 8".

Посетете страницата на файловото хранилище на проекта:

https://github.com/Blosc/c-blosc/releases

и изтеглете последната стабилна версия на изходния код на библиотеката. За примерите по-долу се предполага, че наличната към момента версия на библиотеката е 1.17.0 (по-времето, по което вие изпълнявате тези инструкции, версията може да е по-висока от 1.17.0):

$ wget https://github.com/Blosc/c-blosc/archive/v1.17.0.tar.gz -O c-blosc-1.17.0.tar.gz

Създайте директория, в която да извършите компилирането:

$ mkdir ~/build

Разпакетирайте в нея файла с архива:

$ tar xvf c-blosc-1.17.0.tar.gz -C ~/build

влезте в новосъздадената при разпакетирането директория:

$ cd ~/build/c-blosc-1.17.0

и там изпълнете операциите по компилирането и инсталирането:

$ LDFLAGS="-L/usr/unite/zstd-1.4.4-gcc/usr/local/lib -lzstd" cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/unite/c-blosc-1.17.0-gcc -DPREFER_EXTERNAL_ZSTD=ON -DZSTD_INCLUDE_DIR=/usr/unite/zstd-1.4.4-gcc/usr/local/include -DZSTD_LIBRARY=/usr/unite/zstd-1.4.4-gcc/usr/local/lib/libzstd.so -DPREFER_EXTERNAL_ZSTD=ON
$ LD_LIBRARY_PATH=/usr/unite/zstd-1.4.4-gcc/usr/local/lib:$LD_LIBRARY_PATH make -j6
$ LD_LIBRARY_PATH=/usr/unite/zstd-1.4.4-gcc/usr/local/lib:$LD_LIBRARY_PATH make test

ВНИМАНИЕ! Пристъпете към инсталирането на продукта на компилация само и единствено, ако всички тестове са проведени успешно!

$ make install

След успешно извършване на инсталацията, може да изведете списък с библиотеките, към които е динамично свързана библиотеката libzmq.so. Това става по следния начин:

$ LD_LIBRARY_PATH=/usr/unite/zstd-1.4.4-gcc/usr/local/lib:$LD_LIBRARY_PATH ldd /usr/unite/c-blosc-1.17.0-gcc/lib/libblosc.so

Трябва да получите изход, който е подобен на:

	linux-vdso.so.1 (0x00007ffd52af7000)
	libzstd.so.1 => /usr/unite/zstd-1.4.4-gcc/usr/local/lib/libzstd.so.1 (0x00007f75e753f000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f75e731f000)
	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f75e6f8a000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f75e6c08000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f75e69f0000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f75e662c000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f75e7a48000)

Най-важното, за което трябва да проверите в този списък с библиотеки, е наличието на libzstd.so (виж реда оцветен в светло синьо).

 

3. Динамично свързване на компилираната библиотека към C и C++ приложения

За да може даден код да бъде компилиран спрямо динамичната версия на libblosc библиотеката (компилирана по процедурата показана по-горе) при използване на configure, следвайте схемата:

$ CC=gcc CXX=g++ ... ./configure ... CGLAGS="-I/usr/unite/c-blosc-1.17.0-gcc/include" LFLAGS="-L/usr/unite/c-blosc-1.17.0-gcc/lib -lblosc"

След успешна компилация спрямо динамичната версия на библиотеката, изпълнимият код трябва да може да зарежда libblosc библиотеката при стартиране. За целта, в текущата сесия на bash, в която ще става стартирането, трябва да се зареди пътя до нея:

$ export LD_LIBRARY_PATH=/usr/unite/c-blosc-1.17.0-gcc/lib:$LD_LIBRARY_PATH

Това зареждане може да бъде направено инцидентно (примера по-горе) или да стане част от постоянните настройки за bash сесията (те са обикновено във файла ~/.bashrc).

Когато се използва статичната версия на ZeroMQ библиотеката, самия файл с библиотеката се задава в списъка с бинарни обекти, на база на които компилатора създава изпълнимия код. Например:

$ gcc -o test test.c file1.o file2.o -I/usr/unite/c-blosc-1.17.0-gcc/include /usr/unite/c-blosc-1.17.0-gcc/lib/libblosc.a

(вместо gcc може да използвате g++, gfortran и др. в зависимост от проекта).

 


Последна актуализация: 10 декември 2019

2019 УНИТе, Веселин Колев