УНИТе

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

Компилиране, инсталиране и използване на Zstandard (ZSTD) под CentOS 7 и 8

Съдържание:

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

 

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

Zstandard (ZSTD) е библиотека за реализиране на компресор/декомпресор за данни, без загуба. Целта на този документ е да предложи рецепта за изграждане на версия на последната версия на библиотеката за CentOS 7 и 8, с използването на GNU Compilers. Използването на Intel Compilers и/или PGI Compilers за компилирането на изходния код, не носи по-висока скорост на изпълнение.

 

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

За да може да създадете стабилно функционираща алтернативна libfabric библиотека под CentOS 7, се изисква да компилирате кода чрез GCC 8.3.1. Как да инсталирате тази версия е описано в документа "Инсталиране и използване на алтернативни версии на GCC компилаторите под CentOS 7". Подразбираща се версия на GCC в CentOS 8 е 8.2.1 е тя е достатъчно добра за компилирането на кода под тази дистрибуция. Следните пакети трябва да бъдат инсталирани преди да започнете с изпълнение на процедурите, описани по-долу:

  • CentOS 7

    $ sudo yum install gcc make glibc-headers kernel-headers
  • CentOS 8

    $ sudo dnf install gcc make glibc-headers kernel-headers

За да изтеглите поседната стабилна версия на изходния програмен код, посетете хранилището на проекта:

https://github.com/facebook/zstd/releases

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

$ wget https://github.com/facebook/zstd/archive/v1.4.4.tar.gz -O zstd-1.4.4.tar.gz

Създайте директория, в която ще се извършва процеса на разпакетиране, конфигуриране и компилиране:

$ mkdir ~/build

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

$ tar xvf zstd-1.4.4.tar.gz -C ~/build

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

$ cd ~/build/zstd-1.4.4

и в нея изпълнете:

  • CentOS 7:

    $ scl enable devtoolset-8 bash
    $ make -j6
    $ make DESTDIR=/usr/unite/zstd-1.4.4-gcc install
  • CentOS 8:

    $ make -j6
    $ make DESTDIR=/usr/unite/zstd-1.4.4-gcc install

Проверете дали наистина библиотеката е инсталирана. Това може да направите, като изпълните:

$ ldd /usr/unite/zstd-1.4.4-gcc/usr/local/lib/libzstd.so

Трябва да получите списък подобен на следния:

	linux-vdso.so.1 (0x00007ffcaf1b7000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f5b31619000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5b31cab000)

 

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

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

$ CC=gcc CXX=g++ ./configure ... CGLAGS="-I/usr/unite/zstd-1.4.4-gcc/usr/local/include" LFLAGS="-L/usr/unite/zstd-1.4.4-gcc/usr/local/lib -lzstd"

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

$ export LD_LIBRARY_PATH=/usr/unite/zstd-1.4.4-gcc/usr/local/lib:$LD_LIBRARY_PATH

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

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

$ gcc -I/usr/unite/zstd-1.4.4-gcc/usr/local/include -o test test.c file1.o file2.o /usr/unite/zstd-1.4.4-gcc/usr/local/lib/libzstd.a

(може да компилирате и с използване на g++ или gfortran, ако конкретния случай го налага).

 


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

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