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でインストールします.
pythonバージョンのアップグレード
1.pythonバージョンと対応するpipをチェックします.protobufの公式例ではpythonが2.7以上で、centos 6.9が2.6を持っているので、アップグレードが必要です.
ソフト接続を作成して、システムのデフォルトpythonをpython 2に変更します.7
yum構成の変更(そうでない場合yumは可能)
これでCentOS 6.9システムPythonは2.7.1にアップグレードされました4バージョン
python 2.7でpipをインストール
1.pipインストールshellファイルをダウンロードする
2.ソフト接続を作成します(そうでないとプロンプト名が存在しません)
これでpipのインストールが完了しました!
GCCバージョンのアップグレード(完全化待ち)
centos自動gccは4.4である.7、ファイルprotocのコンパイルインストールにはパスできません.一度に4.8にアップグレードする必要があります.2以上、C++11をサポートします.
問題が発生する可能性があります:ソースコードのコンパイルアップグレードに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.質問分析:次のコマンドを実行してダイナミックライブラリを確認します.
出力結果は次のとおりです.
以上の出力からgccのダイナミックライブラリは古いバージョンであることがわかります.説明これらの問題は、gccをアップグレードすると、生成されたダイナミックライブラリが古いバージョンのgccのダイナミックライブラリに置き換えられないためです.問題処理gccコンパイル時に生成された最新のダイナミックライブラリを検索するには、次のコマンドを実行します:
出力は次のとおりです.
/home/gcc-5.2.0/gcc-tempはgccアップグレード時の出力ディレクトリです.
上の最新のダイナミックライブラリlibstdc++.so.6.0.21/usr/lib 64ディレクトリにコピー:
レプリケーション後、システムのデフォルト動的ライブラリの指向を変更します.すなわち、デフォルトライブラリのソフト接続を再構築します.
作業ディレクトリを/usr/lib 64に切り替えます.
元のソフト接続のバックアップ:
デフォルトライブラリのソフト接続を最新のダイナミックライブラリに移動します.
デフォルトのダイナミックライブラリのアップグレードが完了しました.次のコマンドを再実行して、ダイナミックライブラリを確認します.
次のように出力されます.
protobufインストール
1.protocコンパイラのインストール:
どのようにコンパイルして合格しないで、gccを新版にアップグレードする必要があって、同時にsoライブラリをアップグレードして、参考にすることができます:https://www.linuxidc.com/Linux/2017-10/147621.htm
バージョンの表示:
protobufのpythonモジュールのインストールを続行します(pythonを使用しない場合は、このステップをスキップします).
転載先:https://www.cnblogs.com/chq3272991/p/10608438.html
インフラストラクチャの確認
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のダイナミックライブラリに置き換えられないためです.
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