前書き
OpenSSLは、コンピューターネットワークを介して送信される情報を保護するためのトランスポート層セキュリティ(TLS)およびセキュアソケット層(SSL)プロトコルのオープンソース実装を含むフル機能のソフトウェアライブラリです。CMakeはクロスプラットフォームのコンパイル(ビルド)ツールであり、すべてのプラットフォームのコンパイルプロセスを簡単なステートメントで記述できます。
3.16より前の新しいバージョンのcmakeをインストールする必要がある場合、次のエラーが発生した場合は、通常、opensslをアップグレードし、OpenSSLを静的にコンパイルして、CMakeのサードパーティライブラリとして使用する必要があります。
collect2: error: ld returned 1 exit status
ld returned 1 exit status Utilities/cmcurl/CMakeFiles ...
それが私のブログ投稿の目的と要約です。ブーストとcmakeのハイバージョンを必要とするプロジェクトがあります。私はいくつかの落とし穴を通り抜けて、オープニングブログに記録しました。
opensslアップグレード
通常、opensslは、ホストのバージョンが古すぎるために更新され、新しいバージョンのcmakeとの互換性がありません。ここでの低バージョンとは、1.1.0より前のバージョンを指します。たとえば、opensslバージョンを入力すると特定のサーバーでは、2016年のバージョン番号は1.0.2です。
# openssl version
OpenSSL 1.0.2g 1 Mar 2016
現在、cmakeに適応するopensslが更新されています。オンラインチュートリアルによると、通常は1.1.1kです。公式ウェブサイトで3を見たようですが、新しすぎると必ずしも良いとは限りません。以下はまだ1.1.1kに基づいています:
# 下载openssl安装包解压
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -xvf openssl-1.1.0k.tar.gz
# 编译安装
cd openssl-1.1.1k/
./config
make install
通常、上記の問題はありません。主な問題は、コンパイルの完了後にバージョン番号を開始または確認することです。上記が構成されていない場合は、opensslを直接削除しないことが最善であることに注意してください。 HTTPSネットワークの検証は失敗するため、上記の方法を使用してコンパイルし、直接上書きすることができます。
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl
echo "/usr/lib" >> /etc/ld.so.conf.d/libc.conf
ldconfig
ここでのエラーは次のようになります。
bin / openssl:再配置エラー:bin / openssl:シンボルEVP_mdc2バージョンOPENSSL_1_1_0がファイルlibcrypto.so.1.1にリンク時間参照で定義されていません
これは、/ usr/libがlibc.confリンク構成に追加されていないためです。追加するだけです。また、anaconda環境にユーザーがいる場合、上記は/ usr / bin / opensslを置き換えます。opensslバージョンを入力すると、xxxx / anaconda3 / bin / opensslが報告されます。そのようなファイルまたはディレクトリはありません。理由は、システムはopensslのキーを検出します。これを書いている時点では、システム環境変数の下にanaconda3が最初に見つかりましたが、anacondaはまだ古いopensslを使用しているため、次のように置き換える必要があります。
ln -s /usr/bin/openssl /home/xxx/anaconda3/bin/openssl
次に、openssl versionと入力して、バージョン番号を確認します。
root@xx-PowerEdge-R740:/# openssl version
OpenSSL 1.1.1k 25 Mar 2021
この時点で、opensslは正常にコンパイルされています。
cmakeのアップグレード
opensslと同様に、cmakeもアップグレードする必要があります。Ubuntu標準リポジトリにcmakeのソースがありますが、バージョンが古すぎます。現在、新しいcmakeが必要な場合は、ソースコードに基づいてコンパイルされます。プロセス以下のとおりであります:
まず、opensslと同様に、最初にバージョンを確認します。
cmake -version
# cmake version 2.8.12.2
opensslに問題がないと判断された場合、cmakeに大きな問題はありません。インストール手順は次のとおりです。
# 卸载旧版本
apt remove cmake
# 安装新版本包并解压
wget http://www.cmake.org/files/v3.16/cmake-3.16.6.tar.gz
tar -xvf cmake-3.16.6.tar.gz
# 编译
sudo chmod -R 777 cmake-3.16.6
cd cmake-3.16.6/
apt-get install build-essential
./bootstrap
make -j4
make install
当時、コンパイル時に問題が発生していましたが、50%に達すると、記事の冒頭のエラーが間違っているとのプロンプトが表示され、opensslバージョンが追いつかないことがわかりました。更新しました。更新が正常に行われた後、ここで再度実行します。ビルドは正常にコンパイルされます。ここでは、ブートストラップはパスを指定しないため、デフォルトでシステム変数にロードされます。パスが指定されている場合、古いバージョンはremoveで削除されているため、ソフトリンクを追加する必要があります。
ブートストラップで問題が発生した場合は、。/ bootstrap --helpと入力して、関連するパラメーターを表示できます。
ブーストアップグレード
Boostライブラリは、C++言語標準ライブラリの拡張機能を提供する一部のC++プログラムライブラリの総称であり、Boostコミュニティ組織によって開発および保守されています。Boostライブラリは、C ++標準ライブラリと完全に連携し、拡張機能を提供します。
基本的なリファレンスは次のとおりです。Ubuntu-Boostライブラリのコンパイルとインストール
ミドルウェアを起動するためだけにBoostライブラリをインストールしたので、最終的にlightgbmをコンパイルする必要があり、lightはopensslやcmakeと同じように、boostを使用する必要があります。そのため、Boostライブラリは非常に大きくて強力だとずっと前に聞いていましたが、いいえ、例としてブースト1.68.0を使用します。
# 下载并解压
wget -O https://dl.bintray.com/boostorg/release/1.68.0/source/boost_1_68_0.tar.gz
tar xzvf boost_1_68_0.tar.gz
cd boost_1_68_0/
# 依赖项安装
sudo apt-get update
sudo apt-get install build-essential \
g++ \
autotools-dev \
libicu-dev \
libbz2-dev
# #卸载旧版本
# uninstall dpkg
sudo apt --purge remove libboost-dev
sudo apt --purge remove libboost-all-dev
sudo apt --purge autoremove libboost-all-dev
# to uninstall the version which we installed from source
sudo rm -rf /usr/lib/libboost_*
sudo rm -rf /usr/include/boost
./bootstrap.sh
./b2 --with-python include="/usr/local/include/python3.7m/"
sudo ./b2 install -j4
# Add the Boost libraries path to the default Ubuntu library search path
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/boost.conf'
sudo ldconfig
#查看 boost 版本信息
cat /usr/local/include/boost/version.hpp | grep "BOOST_LIB_VERSION"
#输出如:
# // BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
# define BOOST_LIB_VERSION "1_68"
この時点で、インストールが完了し、環境変数にロードします。
"""
添加环境变量
"""
sudo vim /etc/profile
#添加如下内容:
# CPLUS_INCLUDE_PATH=/usr/local/include
# LIBRARY_PATH=/usr/local/lib
source /etc/profile
"""
建立软连接
"""
cd /usr/local/lib
sudo ln -s libboost_python-py37.so libboost_python3.so
sudo ln -s libboost_python-py37.a libboost_python3.a
# 建立到 /usr/lib/x86_64-linux-gnu 路径的软连接
sudo cp /usr/local/lib/libboost_python37.a /usr/lib/x86_64-linux-gnu/libboost_python-py37.a
sudo cp /usr/local/lib/libboost_python37.so.1.68.0 /usr/lib/x86_64-linux-gnu/libboost-py37.so
この時点で、必要な環境が完成しました。
次の図は、上記の環境に依存するコンパイルのスクリーンショットを示しています。