Protocol Buffers - язык описания разных структур данных для сериализации - аналог XML от компании Google, которые утверждают, что это быстрее, компактнее и вообще круче. Короче говоря, штука полезная, многими используется.
Для начала скомпилируем все это дело под Linux. Изначально компилятор protobuf был создан для языка С++, но мы будем собирать под чистый С, что не освобождает нас от надобности в сборке протобуфера под С++.
Я написал небольшой скрипт на bash, который сам качает исходники с официальных репозиториев, распаковывает и собирает. Поэтому достаточно изначально поставить несколько требуемых библиотек и запустить предлагаемый скрипт. Для сборки потребуется компиляторы gcc-g++. Если у вас DEB-дистрибутив (Debian, Ubuntu), то можно доставить следующее:
# apt-get install build-essential
В случае RPM (CentOS, Fedora), то можно поставить gcc-g++ и библиотеку glibc-headers.
# yum install gcc gcc-c++
# yum install glibc-headers
Этого вроде достаточно для старта скрипта для сборки protobuf. Если при сборке вы обнаружили другие зависимости, буду признателен, за комментарии к этой статье по этому поводу!
Далее будет приведен скрипт, предварительно настроив который, можно будет просто запустить и ждать. Главный параметр, на который следует обратить внимание - BASE_PATH. Путь к базовому каталогу, где все будет лежать. Изначально, путь указан как $HOME/protobuf - то есть в домашнем каталоге пользователя в директории protobuf. Если нужно собрать где то в другом месте, то главное надо поменять значение этой переменной. Если сборка происходит там, где недостаточно прав пользователя (скрипт выполнится некорректно), то надо запускать с правами суперпользователя.
После сборки в каталоге $BASE_PATH/$PROTOBUF_BUILD_DIR будет лежать готовый компилятор с библиотеками protobuf, а в $BASE_PATH/$PROTOBUF_C_BUILD_DIR будет находится protobuf-c.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#!/bin/bash # Скрипт написан на моменте версий: # protobuf v3.0.0 # protobuf-c v1.1.1 # URL до архива исходников protobuf PROTOBUF_SRC_URL=https://github.com/google/protobuf/archive/master.zip # URL до архива исходников protobuf-c PROTOBUF_C_SRC_URL=https://github.com/protobuf-c/protobuf-c/archive/master.zip # имя базовой директории где будут расположены # все объявленные ниже каталоги BASE_PATH=$HOME/protobuf # имя директории для исходников protobuf PROTOBUF_SRC_DIR=protobuf-master # имя директории для исходников protobuf-c PROTOBUF_C_SRC_DIR=protobuf-c-master # имя директории для собранного protobuf PROTOBUF_BUILD_DIR=protobuf-build # имя директории для собранного protobuf-c PROTOBUF_C_BUILD_DIR=protobuf-c-build # имя директории для архивов исходников ZIPS_DIR=zips ############################################################# ############################################################# mkdir $BASE_PATH mkdir $BASE_PATH/$ZIPS_DIR cd $BASE_PATH printf "\n\n\n" echo "==================================" echo "START DOWNLOAD SOURCES" echo "==================================" printf "\n\n\n" wget $PROTOBUF_SRC_URL unzip *.zip mv ./*.zip ./$ZIPS_DIR/master-protobuf.zip wget $PROTOBUF_C_SRC_URL unzip *.zip mv ./*.zip ./$ZIPS_DIR/master-c-protobuf.zip mkdir ./$PROTOBUF_BUILD_DIR mkdir ./$PROTOBUF_C_BUILD_DIR cd $PROTOBUF_SRC_DIR printf "\n\n\n" echo "==================================" echo "START BUILD Protobuf" pwd echo "==================================" printf "\n\n\n" ./autogen.sh ./configure --prefix="$BASE_PATH/$PROTOBUF_BUILD_DIR" make && make check && make install cd $BASE_PATH/$PROTOBUF_C_SRC_DIR printf "\n\n\n" echo "==================================" echo "START BUILD Protobuf-c" pwd echo "==================================" printf "\n\n\n" ./autogen.sh ./configure \ PROTOC="$BASE_PATH/$PROTOBUF_BUILD_DIR/bin/protoc" \ protobuf_CFLAGS="-I$BASE_PATH/$PROTOBUF_BUILD_DIR/include/" \ protobuf_LIBS="-L$BASE_PATH/$PROTOBUF_BUILD_DIR/lib/ -lprotobuf" \ --prefix="$BASE_PATH/$PROTOBUF_C_BUILD_DIR" make && make install |
Копируем скрипт в какой нибудь файл, даем ему права на исполнение, запускаем. Я сам использовал этот скрипт на CentOS 7 и Ubuntu 14.04 - все работает.