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
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 ;
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 :
Il y a un dossier eigen3 dans include, et ce dossier eigen3 est le même que le précédent usr/include/eigen3
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
, 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.
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
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 :
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