eigen3 の複数のバージョンの共存と ceres との互換性の問題

Eigen3 の複数のバージョンが共存する

というのは、eigen3.3.4 と ceres2.1.0 が以前にインストールされていたのですが、この組み合わせでは isc-loam コンパイルを通過できず、昨夜解決策を読んだところ、eigen のバージョンを 3.3.7 以上に上げるだけだと書いてありました。しかし、試してみてもまだうまくいきません。思ったほど簡単なことのようです。

事前に準備する

以前に eigen3.3.4 がインストールされており、多くのコードがこの環境に基づいて構築されているため、このバージョンを捨ててはいけません。そこで3.3.4と3.3.8が共存する固有値を作りたいと思います。したがって、最初に eigen3.3.4 からいくつかのものをバックアップする必要があります。主な場所は次のとおりです。

usr/include/eigen3

他のバージョンがインストールされる前に、現在 usr/include/eigen3 にあるものは、eigen3.3.4 にあるものです。

ここに画像の説明を挿入します
このフォルダーの内容は 3.3.8 の同じファイルの内容に置き換える必要があるため、覚えておく必要があります。

${EIGEN3_VERSION_STRING} 変数は、通常、固有バージョンを確認するために cmakelists で使用されます。この変数は、/usr/lib/cmake/eigen3 ディレクトリにあるeigen3Config.cmake ファイルを通じて取得されます。複数のバージョンをインストールした後、新しい *.cmake ファイルが作成されます。は、
インストールしたディレクトリの /eigen3/cmake ディレクトリに生成されます。例: /usr/share/eigen3/cmake
なので、最初に元のフォルダと元のインストール ファイルをバックアップします: eigen のインストールとマルチバージョンを参照してください。管理

sudo mv /usr/include/eigen3 /usr/include/eigen334	#334为旧版本

/usr/lib/cmake/eigen3

${EIGEN3_VERSION_STRING} 変数は、通常、固有バージョンを確認するために cmakelists で使用されます。この変数は、/usr/lib/cmake/eigen3 ディレクトリの Eigen3Config.cmake ファイルから取得されます。
ここに画像の説明を挿入します

sudo mv /usr/lib/cmake/eigen3 /usr/lib/cmake/eigen334

/usr/share/pkgconfig/eigen3.pc

システムは、eigen3.pc ファイルを通じて eigen ライブラリを検索します。どちらのインストール方法でも、eigen3.pc ファイルが生成されます。apt-get によってインストールされたものは **/usr/share/pkgconfig フォルダーに保存され、インストールされたものは、**/usr/share/pkgconfig フォルダーに保存されます。ソースコードは **/usr/share/pkgconfig フォルダに格納されており、インストールディレクトリの /usr/local/share/pkgconfig** フォルダ内では、バージョンとインストール場所以外は同じです。 .pcは、新しいバージョンのインストール後も機能するため、古いバージョンで変更する必要はありません。このファイルを使用して、内部のコードを変更するだけです。

この中のバージョンを渡すことができます

pkg-config --modversion eigen3

チェック

ソースコードのインストール

公式ソースコードのアドレス: http://eigen.tuxfamily.org/index.php?title=Main_Page
必要なバージョン (私は 3.3.8 をダウンロードしました) をダウンロードして解凍します。

コンパイル:

cd到eigen

mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/include/eigen338 ..             //安装到usr/include/eigen338
make
sudo make install

インストールが完了したら、usr/include/eigen338 にアクセスして確認してください。これにより、usr/include/eigen338 ファイルの下に eigen3 ライブラリが生成されます。入力後は次のようになります。

ここに画像の説明を挿入します
include に eigen3 フォルダがあり、この eigen3 フォルダは前の usr/include/eigen3 と同じです。
ここに画像の説明を挿入します

バージョンの切り替え

第一歩

したがって、インクルードフォルダーに移動して、次のコマンドを実行します。

sudo mv eigen3/ usr/include/eigen3

このように、3.3.8 の eigen3 は usr/include/eigen3 に直接配置されます (3.3.4 バージョンに戻したい場合は、この eigen3 を eigen338 に戻し、eigen334 を eigen3 に戻すだけです。それだけです。使用するバージョンは eigen3) 置き換えられていない .pc ファイルと .cmake ファイルがまだあるため、これでまだ終わりではありません。

ステップ2

システムは、eigen3.pc ファイルを通じて eigen ライブラリを検索します。どちらのインストール方法でも、eigen3.pc ファイルが生成されます。apt-get を通じてインストールされたものは /usr/share/pkgconfig フォルダーに保存され、source を通じてインストールされたものは、コードはインストールディレクトリの share/pkgconfig フォルダに保存されています。2 つのファイルの比較は次のとおりです。Eigen3マルチバージョン切り替え
ここに画像の説明を挿入します
を参照すると、最初の行のインストール場所とバージョンの違いを除いて、それが確認できます。 7 行目 (左側の 8 行目は私が追加したコメントです) では、2 つのファイル間に他に違いはないので、どちらかを保持できます。ここでは、apt-get を通じてインストールされた .pc ファイルを直接保存し、 /usr/share/pkgconfig に保存されます。上の図では左側のファイルです。このファイルは変更できないため、変更するためのアクセス許可を追加する必要があります。

次に、ファイルを変更します。eigen3 は /usr/include に配置されているため、最初の行を変更する必要はありません。prefix=/usr のままにしてください。バージョンを変更する必要がある場合は、使用しているバージョンに変更してください。上の図の左側に示すように、// を使用して他のバージョンをコメントアウトし、変更後に保存して終了します。

ここに画像の説明を挿入します

これまでのところ、コマンドを使用して

pkg-config --modversion eigen3

すでにバージョンが 3.3.8 に変更されていることがわかりますが、これまでのところ cmake が eigen3.3.8 を見つけられないため、コンパイル中にはまだ使用できず、そこで cmake を変更する必要があります。

ステップ3

新しくインストールした eigen の cmake ファイルは /usr/include/eigen338/eigen3/share/eigen3/cmake にあります。したがって、

cd usr/include/eigen338/eigen3/share/eigen3/
sudo cp -r cmake/ /usr/lib/cmake/eigen338

このように、/usr/lib/cmake には eigen334 と eigen338 という 2 つのフォルダーが存在しますが、どちらのバージョンを使用しても、このバージョンのフォルダー名は eigen3 に変更されるので、eigen338 を eigen3 に変更します。

sudo mv eigen338 eigen3

これまでのところ、eigen3 はすべて eigen3.3.8 に置き換えられています。

ただし、コンパイルすると、依然としてエラーが発生します。

Ceres の検索に失敗しました。Eigen の依存関係が見つかりましたが、見つかった Eigen のバージョン (3.3.8) は適切ではありません。

これは、ceres でコンパイルされたバージョンが以前の 3.3.4 であり、現在の固有バージョンが 3.3.8 であることを意味するため、変更する必要があります。

詳細については、「Eigen の依存関係が見つかりましたが、Eigen のバージョン... コンパイルの問題を解決する」を参照してください。

問題の原因: インストールのバージョンが CMakeList ファイルに必要なバージョンと一致しません。
次のコードを /usr/local/lib/cmake/Ceres/CeresConfig.cmake に追加します。

set(EIGEN_INCLUDE_DIR "/usr/include/eigen3")  #添加此行
set(CERES_EIGEN_VERSION 3.3.8)  #添加此行,版本号与你安装的对应

また、上記の元のバージョンを 3.3.8 に変更しました。
ここに画像の説明を挿入します

今度は isc-loam でコンパイルして通れるはずと思っていたら、やはりエラーが出てしまい、よくわかりませんでした。苦労した挙句、eigen3 のバージョンを変えてみましたが、やはりダメでした. 問題をもう一度確認する必要がありました。

報告されたエラーは次のとおりです。

ここに画像の説明を挿入します
ただし、他の以前のコードは正常にコンパイルできます。以前のコードの環境は ceres2.1.0 と eigen3.3.4 です。現在は ceres2.1.0 と eigen3.3.8 に置き換えられており、まだ動作しています。

参考

1.Eigen3のマルチバージョン切り替え2.Linux システムで異なるバージョンの複数の Eigen ライブラリをインストールし、それらを柔軟に呼び出すにはどうすればよいですか
? 3.eigenのインストールと複数バージョンの管理4.eigen関連の問題 (インストール、複数バージョンの切り替え、バージョンの表示) 5.eigenバージョンの競合の解決 ----複数バージョンの管理6.Eigenの依存関係が見つかりましたが、バージョンはEigen の… …コンパイルの問題を解決する



おすすめ

転載: blog.csdn.net/weixin_41756645/article/details/129570141
おすすめ