Coexistence de plusieurs versions d'eigen3 et problèmes de compatibilité avec ceres

Eigen3 plusieurs versions coexistent

Parce qu'eigen3.3.4 et ceres2.1.0 ont déjà été installés, mais cette combinaison ne peut pas passer la compilation isc-loam. J'ai lu la solution hier soir et j'ai dit qu'il s'agissait simplement d'augmenter la version propre à 3.3.7 ou supérieure. Mais je viens de l'essayer, et ça ne marche toujours pas. Il semble que c'est aussi simple que je le pensais.

Préparez-vous à l'avance

Étant donné qu'eigen3.3.4 a déjà été installé et que de nombreux codes sont construits sur la base de cet environnement, cette version ne doit pas être jetée. Je veux donc créer un propre où 3.3.4 et 3.3.8 coexistent. Vous devez donc d’abord sauvegarder certaines éléments d’eigen3.3.4. Les principaux lieux sont :

usr/include/eigen3

Avant que d'autres versions ne soient installées, les éléments actuellement dans usr/include/eigen3 sont les éléments dans eigen3.3.4, qui sont

Insérer la description de l'image ici
Vous devez vous souvenir du contenu de ce dossier car il doit être remplacé par le contenu des mêmes fichiers dans la version 3.3.8.

La variable ${EIGEN3_VERSION_STRING} est généralement utilisée dans les cmakelists pour vérifier la version propre. Cette variable est obtenue via le fichier Eigen3Config.cmake dans le répertoire /usr/lib/cmake/eigen3 ; après l'installation de plusieurs versions, un nouveau fichier *.cmake est généré dans le répertoire
que vous avez installé Dans le répertoire /eigen3/cmake ; par exemple : /usr/share/eigen3/cmake
, sauvegardez donc d'abord le dossier d'origine et le fichier d'installation d'origine : reportez-vous à l'installation propre et à la multiversion gestion

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

/usr/lib/cmake/eigen3

La variable ${EIGEN3_VERSION_STRING} est généralement utilisée dans les cmakelists pour vérifier la version propre. Cette variable est obtenue à partir du fichier Eigen3Config.cmake dans le répertoire /usr/lib/cmake/eigen3 ;
Insérer la description de l'image ici

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

/usr/share/pkgconfig/eigen3.pc

Le système recherche la bibliothèque propre via le fichier eigen3.pc. Les deux méthodes d'installation généreront un fichier eigen3.pc. Celui installé via apt-get est stocké dans le dossier **/usr/share/pkgconfig, et celui installé via le code source est stocké dans le dossier **/usr/share/pkgconfig. Dans le dossier /usr/local/share/pkgconfig** du répertoire d'installation, tout est identique à l'exception de la version et de l'emplacement d'installation. Par conséquent, eigen3 .pc n'a pas besoin d'être modifié dans l' ancienne version car il fonctionnera toujours après l'installation de la nouvelle version. Utilisez ce fichier et modifiez simplement le code à l'intérieur

La version à l'intérieur peut être transmise

pkg-config --modversion eigen3

Vérifier

Installation du code source

Adresse officielle du code source : http://eigen.tuxfamily.org/index.php?title=Main_Page
Téléchargez la version requise (j'ai téléchargé la 3.3.8) et décompressez-la

Compiler:

génération d'arrivée de cd

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

Une fois l'installation terminée, allez dans usr/include/eigen338 et jetez-y un œil. Cela générera la bibliothèque eigen3 sous le fichier usr/include/eigen338. Après avoir entré, cela devrait ressembler à ceci :

Insérer la description de l'image ici
Il y a un dossier eigen3 dans include, et ce dossier eigen3 est le même que le précédent usr/include/eigen3
Insérer la description de l'image ici

Changement de version

la première étape

Par conséquent, allez dans le dossier include et exécutez la commande suivante :

sudo mv eigen3/ usr/include/eigen3

De cette façon, eigen3 dans 3.3.8 est directement placé dans usr/include/eigen3 (si vous souhaitez revenir à la version 3.3.4, remettez simplement cet eigen3 dans eigen338, et remettez eigen334 en eigen3. C'est tout. Quelle que soit la version que vous utilisez, elle est propre3) Ce n'est pas encore la fin, car il reste encore des fichiers .pc et .cmake qui n'ont pas été remplacés.

Étape 2

Le système recherche la bibliothèque propre via le fichier eigen3.pc. Les deux méthodes d'installation généreront un fichier eigen3.pc. Celui installé via apt-get est stocké dans le dossier /usr/share/pkgconfig, et celui installé via source le code est stocké dans Dans le dossier share/pkgconfig du répertoire d'installation, la comparaison des deux fichiers est la suivante : En vous référant au changement multi-version Eigen3
Insérer la description de l'image ici
, vous pouvez voir qu'à l'exception de l'emplacement d'installation sur la première ligne et de la différence de version dans la septième ligne (la 8ème ligne à gauche est le commentaire que j'ai ajouté ), il n'y a pas d'autre différence entre les deux fichiers, on peut donc en garder un. Ici on sauvegarde directement le fichier .pc installé via apt-get et stocké dans /usr/share/pkgconfig. Dans l'image ci-dessus, c'est celui de gauche. Celui-ci Le fichier ne peut pas être modifié, vous devez donc ajouter des autorisations pour le modifier.

Ensuite, modifiez le fichier. Puisque notre eigen3 est placé sous /usr/include, la première ligne n'a pas besoin d'être modifiée. Gardez simplement prefix=/usr. Si vous devez modifier la version, remplacez-la par la version que vous utilisez. Comme indiqué sur le côté gauche de l'image ci-dessus, commentez simplement l'autre version avec //, enregistrez et quittez après modification.

Insérer la description de l'image ici

Jusqu'à présent, en utilisant la commande

pkg-config --modversion eigen3

Vous pouvez déjà voir que la version a été modifiée en 3.3.8, mais elle ne peut toujours pas être utilisée lors de la compilation car jusqu'à présent, cmake ne trouve pas eigen3.3.8, vous devez donc y modifier cmake.

Étape 3

Le fichier cmake de l'eigen nouvellement installé se trouve dans /usr/include/eigen338/eigen3/share/eigen3/cmake, par conséquent,

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

De cette façon, il y a deux dossiers eigen334 et eigen338 dans /usr/lib/cmake. Quelle que soit la version utilisée, changez le nom du dossier de cette version en eigen3, donc changez eigen338 en eigen3

sudo mv eigen338 eigen3

Jusqu'à présent, tous les eigen3 ont été remplacés par eigen3.3.8

Cependant, lorsque je compile, j'obtiens toujours une erreur :

Échec de la recherche de Ceres - Dépendance Eigen trouvée, mais la version d'Eigen trouvée (3.3.8) n'exa pas

Cela signifie que la version compilée dans Ceres est la précédente 3.3.4 et que votre version propre actuelle est la 3.3.8. Vous devez donc la modifier.

Pour plus de détails, veuillez vous référer à Dépendance Eigen trouvée, mais la version d'Eigen... Résolution des problèmes de compilation

Cause du problème : la version d'installation ne correspond pas à la version requise par le fichier CMakeList.
Ajoutez le code suivant à /usr/local/lib/cmake/Ceres/CeresConfig.cmake

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

Et j'ai aussi changé la version originale ci-dessus en 3.3.8
Insérer la description de l'image ici

Quand j'ai pensé qu'isc-loam devrait être capable de compiler et de passer cette fois, j'ai toujours eu cette erreur. Je ne l'ai vraiment pas compris. Après tous ces problèmes, j'ai changé la version d'eigen3, mais cela n'a toujours pas fonctionné J'ai dû vérifier à nouveau le problème.

L'erreur signalée est la suivante :

Insérer la description de l'image ici
Mais mes autres codes précédents peuvent toujours être compilés normalement. Les environnements des codes précédents sont ceres2.1.0 et eigen3.3.4. Maintenant, il a été remplacé par ceres2.1.0 et eigen3.3.8 et cela fonctionne toujours.

référence

1. Commutation multi-version Eigen3
2. Comment installer plusieurs bibliothèques Eigen de différentes versions et les appeler de manière flexible sous le système Linux ?
3. Installation propre et gestion multi-versions
4. Problèmes liés aux propres (installation, changement de version multi-version, affichage des versions)
5. Résolution des conflits de versions propres ---- gestion multi-versions
6. Dépendance propre trouvée, mais la version d'Eigen… …Résoudre les problèmes de compilation

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41756645/article/details/129570141
conseillé
Classement