centos 6.9でのProtocol Buffersデータ転送およびストレージプロトコルの使用(python)

7047 ワード

Protocol BuffersはGoogleが定義した言語間、プラットフォーム間、拡張可能なデータ転送および格納プロトコルであることを知っています.フィールドプロトコルをそれぞれ転送の両端に配置し、転送データにはデータ自体しか含まれず、フィールドの説明を含む必要がないため、転送データ量が小さく、解析効率が高いです.興味のある方は訪問できますhttps://developers.google.com/protocol-buffers/docs/overview.Protocol Buffers公式はC++,Java,Python,C#,Go,PHPのみサポートしています.
インフラストラクチャの確認
1.centosの下のソフトウェアをチェックし、なければyumでインストールします.
autoconf
automake
libtool
curl (used to download gmock)
make
g++
unzip

pythonバージョンのアップグレード
1.pythonバージョンと対応するpipをチェックします.protobufの公式例ではpythonが2.7以上で、centos 6.9が2.6を持っているので、アップグレードが必要です.
cd ~
wget http://python.org/ftp/python/2.7.4/Python-2.7.4.tgz
tar -xvf Python-2.7.4.tgz
cd Python-2.7.4
./configure --prefix=/usr/local/python2.7
make check
make
make install

ソフト接続を作成して、システムのデフォルトpythonをpython 2に変更します.7
mv /usr/bin/python /usr/bin/python.old
ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python
python -v

yum構成の変更(そうでない場合yumは可能)
vim /usr/bin/yum
     #!/usr/bin/python        python    #!/usr/bin/python2.6

これでCentOS 6.9システムPythonは2.7.1にアップグレードされました4バージョン
python 2.7でpipをインストール
1.pipインストールshellファイルをダウンロードする
cd ~
wget  https://bootstrap.pypa.io/get-pip.py
yum install setuptool zlib* -y
python get-pip.py

2.ソフト接続を作成します(そうでないとプロンプト名が存在しません)
mv /usr/bin/pip /usr/bin/pip.old
ln -s /usr/local/python2.7/bin/pip /usr/bin/pip
pip -V

これでpipのインストールが完了しました!
GCCバージョンのアップグレード(完全化待ち)
centos自動gccは4.4である.7、ファイルprotocのコンパイルインストールにはパスできません.一度に4.8にアップグレードする必要があります.2以上、C++11をサポートします.
cd ~
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.gz
tar -zvxf gcc-6.1.0.tar.gz --directory=/usr/local/
cd /usr/local/gcc-6.1.0
./contrib/download_prerequisites
mkdir build && cd build 
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make && make install 

問題が発生する可能性があります:ソースコードのコンパイルアップグレードにgccがインストールされた後、コンパイルプログラムや他のプログラムを実行する時、類似/usr/lib 64/libstdc++が発生することがあります.so.6: version `GLIBCXX_3.4.21'not foundの問題.これは、gccをアップグレードすると、生成されたダイナミックライブラリが古いバージョンのgccのダイナミックライブラリを置き換えていないため、gccの最新バージョンのダイナミックライブラリをシステムの古いバージョンのダイナミックライブラリに置き換えることで解決できます.(参考:https://www.linuxidc.com/Linux/2017-10/147621.htm) 1.質問分析:次のコマンドを実行してダイナミックライブラリを確認します.
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

出力結果は次のとおりです.
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

以上の出力からgccのダイナミックライブラリは古いバージョンであることがわかります.説明これらの問題は、gccをアップグレードすると、生成されたダイナミックライブラリが古いバージョンのgccのダイナミックライブラリに置き換えられないためです.
  • 問題処理gccコンパイル時に生成された最新のダイナミックライブラリを検索するには、次のコマンドを実行します:
  • find / -name "libstdc++.so*"

    出力は次のとおりです.
    /usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so
    /usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
    /usr/lib64/libstdc++.so.6.0.13
    /usr/lib64/libstdc++.so.6
    /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyc
    /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyo
    /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.py
    /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyc
    /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyo
    /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.py
    /usr/local/gcc6.1.0/lib64/libstdc++.so.6.0.22
    /usr/local/gcc6.1.0/lib64/libstdc++.so
    /usr/local/gcc6.1.0/lib64/libstdc++.so.6.0.22-gdb.py
    /usr/local/gcc6.1.0/lib64/libstdc++.so.6
    /opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22    //     
    /opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so
    /opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6
    /opt/gcc-6.1.0/gcc-build-6.1.0/prev-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
    /opt/gcc-6.1.0/gcc-build-6.1.0/prev-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so
    /opt/gcc-6.1.0/gcc-build-6.1.0/prev-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6
    /opt/gcc-6.1.0/gcc-build-6.1.0/x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
    /opt/gcc-6.1.0/gcc-build-6.1.0/x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so
    /opt/gcc-6.1.0/gcc-build-6.1.0/x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6
    ……

    /home/gcc-5.2.0/gcc-tempはgccアップグレード時の出力ディレクトリです.
    上の最新のダイナミックライブラリlibstdc++.so.6.0.21/usr/lib 64ディレクトリにコピー:
    cp /opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 /usr/lib64

    レプリケーション後、システムのデフォルト動的ライブラリの指向を変更します.すなわち、デフォルトライブラリのソフト接続を再構築します.
    作業ディレクトリを/usr/lib 64に切り替えます.
    cd /usr/lib64

    元のソフト接続のバックアップ:
    mv libstdc++.so.6 libstdc++.so.6.old

    デフォルトライブラリのソフト接続を最新のダイナミックライブラリに移動します.
    ln -s libstdc++.so.6.0.22 libstdc++.so.6

    デフォルトのダイナミックライブラリのアップグレードが完了しました.次のコマンドを再実行して、ダイナミックライブラリを確認します.
    strings /usr/lib64/libstdc++.so.6 | grep GLIBC

    次のように出力されます.
    GLIBCXX_3.4
    GLIBCXX_3.4.1
    GLIBCXX_3.4.2
    GLIBCXX_3.4.3
    GLIBCXX_3.4.4
    GLIBCXX_3.4.5
    GLIBCXX_3.4.6
    GLIBCXX_3.4.7
    GLIBCXX_3.4.8
    GLIBCXX_3.4.9
    GLIBCXX_3.4.10
    GLIBCXX_3.4.11
    GLIBCXX_3.4.12
    GLIBCXX_3.4.13
    GLIBCXX_3.4.14
    GLIBCXX_3.4.15
    GLIBCXX_3.4.16
    GLIBCXX_3.4.17
    GLIBCXX_3.4.18
    GLIBCXX_3.4.19
    GLIBCXX_3.4.20
    GLIBCXX_3.4.21
    GLIBCXX_3.4.22
    GLIBC_2.3
    GLIBC_2.2.5
    GLIBC_2.3.2
    GLIBCXX_FORCE_NEW
    GLIBCXX_DEBUG_MESSAGE_LENGTH

    protobufインストール
    1.protocコンパイラのインストール:
        https://github.com/google/protobuf/releases/ (      )
    cd ~
    wget https://github-production-release-asset-2e65be.s3.amazonaws.com/23357588/fba5d776-940f-11e8-88d0-a303c1188d2f?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190312%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190312T075947Z&X-Amz-Expires=300&X-Amz-Signature=e57b91ea0140f33e366adf63c67bb597a4a18e8ef96182a0ca98c283008d6710&X-Amz-SignedHeaders=host&actor_id=20057157&response-content-disposition=attachment%3B%20filename%3Dprotobuf-all-3.6.1.tar.gz&response-content-type=application%2Foctet-stream
    tar -xvf protobuf-all-3.6.1.tar.gz
    cd protibuf-3.6.1
    #       
    ./configure --prefix=/usr/local/protobuf
    #   ,       
    make check
    make && make install

    どのようにコンパイルして合格しないで、gccを新版にアップグレードする必要があって、同時にsoライブラリをアップグレードして、参考にすることができます:https://www.linuxidc.com/Linux/2017-10/147621.htm
    バージョンの表示:
    /usr/local/bin/protoc --version
    libprotoc 3.6.1

    protobufのpythonモジュールのインストールを続行します(pythonを使用しない場合は、このステップをスキップします).
    cd ./python 
    python setup.py build 
    python setup.py test 
    python setup.py install

    転載先:https://www.cnblogs.com/chq3272991/p/10608438.html