Enregistrement de débogage de programmation (C++)

refuse de tomber dans le même gouffre

Mise à jour 20230420

3. Quelques problèmes lors de l'utilisation d'autres chemins après avoir copié le programme complet


Problème 1. Cmake signale une solution d'erreur d'incohérence de chemin
Supprimez tous les fichiers du dossier de construction dans le nouveau chemin et recompilez.
Problème 2. make[2] : Avertissement : erreur d'horloge détectée. Votre version de build est peut-être incomplète.
La raison peut être : l'heure de la dernière modification du fichier sur le serveur est postérieure à l'horloge système actuelle
Solution
Ouvrez l'entrée du terminal dans le répertoire cpp

find ./ -type f |xargs touch

Compilez à nouveau et ce sera normal

Mise à jour 20230417

2. Après compilation avec Cmake, le chemin relatif ne peut pas lire le fichier de nuage de points

Le répertoire du fichier est le suivant

├── build
│   └── bin
│       ├── Linx
│       └── table_scene_lms400.pcd
├── CMakeLists.txt
├── include
│   ├── func_common.h
│   ├── func_opencv.h
│   └── func_pcl.h
└── src
    ├── func_common.cpp
    ├── func_opencv.cpp
    ├── func_pcl.cpp
    └── main.cpp

Théoriquement, le fichier exécutable est généré dans la construction, mais le fichier de nuage de points dans le même répertoire ne peut pas être trouvé en utilisant le chemin relatif. Après avoir changé le chemin absolu, la solution peut être utilisée. Ajoutez la combinaison
de lecture
du fichier de travail actuel path et le chemin relatif pour former un chemin absolu.
Ajoutez un fichier d'en-tête

#include <unistd.h>
#include <limits.h>

La partie code est la suivante

// 读取当前工作路径和相对路径组合成绝对路径
char buffer[PATH_MAX];
// 获取当前工作路径
if (getcwd(buffer, PATH_MAX) == NULL) {
    
    
    std::cerr << "错误: 无法读取当前工作路径\n";
    return;
}
std::string current_working_directory(buffer);
std::string fixed_string = "table_scene_lms400.pcd";
std::string new_absolute_path = current_working_directory + fixed_string;
std::cout << "点云文件绝对路径: " << new_absolute_path << std::endl;

Précautions
Lorsque vous utilisez VSCode pour déboguer, le chemin du fichier doit être dans le dossier actuellement ouvert, c'est-à-dire dans le cpprépertoire. Lors de l'exécution directe du fichier exécutable, le chemin du fichier doit être dans le dossier du
fichier exécutable , c'est-à-dire dans l'annuaireLinxcpp/build/bin

1. Erreurs de compilation embarrassantes

error: expected initializer before ‘int

La raison est qu'il n'y a pas de point-virgule à la fin de la déclaration de fonction dans la ligne précédente de la déclaration de fonction dans le fichier .h. Solution :
Vérifiez
la partie de la définition de fonction sans point-virgule et ajoutez un point-virgule.

おすすめ

転載: blog.csdn.net/qq_42951635/article/details/130191700