12
votes

Impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type; Courir ou déboguer en éclipse

sur Ubuntu, j'ai une application C ++ à Eclipse. L'application compile bien et je peux exécuter l'application de la ligne de commande.

Mais quand j'essaie de le déboguer ou de le gérer avec Eclipse, l'erreur :

"Impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type" est lancé sur une bibliothèque partagée.

J'ai défini ld_library_path dans mon fichier bishrc et définir une variable d'environnement LD_Library_Path dans la configuration d'exécution et la configuration de débogage vers:

/ home / behlingb / documents / API_LIBS / FileGDB_API / LIB

Que manque-t-il d'autre ici pour que Eclipse gère cela?



Mise à jour

Il n'existe qu'un seul fichier d'objet partagé que cette application nécessite et ce fichier provient d'un téléchargement de l'API tiers. Je viens de constater que si je place l'objet partagé dans le répertoire, l'exécutable est dans, il déboguera dans Eclipse. Existe-t-il un moyen de spécifier un répertoire différent, donc je n'ai pas à copier le fichier pour chaque projet?


2 commentaires

Je pense que vous êtes sur la bonne voie avec la configuration de la configuration de LD_Library_Path. Avez-vous vérifié pour vous assurer que vous l'exécutez à l'aide de cette configuration d'exécution? Dans LICDLIPSE, si vous cliquez sur la flèche grise Little, vers le bas, en plus de la flèche de droite, verte, droite, droite, vous pouvez choisir la configuration d'exécution à utiliser.


J'ai trouvé l'éclipse CDT (Neon.3) n'est pas très "stable". Parfois, Ctrl + Flèche ne fonctionne pas. La fermeture de la fenêtre la corrige. Parfois, le LD_Library_Path n'est pas ajouté à ce que j'ai demandé. Le redémarrage la corrige.


5 Réponses :


3
votes

Vous pouvez utiliser strace utilitaire (et ensuite grep pour Ouvrir stat appels) pour obtenir Liste des fichiers .so requis pour exécuter SMTH, puis utilisez localiser (ou rechercher des packages) pour connaître le placement réel de liber


0 commentaires

20
votes

J'utilise la version Kepler d'Eclipse.

  1. dans Eclipse Cliquez sur Exécuter, puis des configurations de débogage
  2. Cliquez sur l'onglet Environnement
  3. Cliquez sur Nouveau
  4. Ajouter ld_library_path et définir sa valeur dans le répertoire contenant la bibliothèque
  5. redémarrez Eclipse

0 commentaires

2
votes

Ceci est valide avec Eclipse Kepler (je n'ai pas examiné les anciennes versions). Pour activer le débogueur de charger vos bibliothèques partagées, essayez de définir LD_Library_Path échouera. Cependant, le plug-in CDT fournit une liste Bibliothèques partagée à cet effet

exécuter menu -> configurations de débogage ...

Puis dans la boîte de dialogue de configuration

application C / C ++ -> Votre projet -> Le débogueur onglet -> bibliothèques partagées onglet

la boîte de dialogue Kepler pour ajouter des bibliothèques partagées de débogage


2 commentaires

Cela semble vraiment comme si cela devrait être la bonne réponse. Je l'ai essayé sur Mars et cela ne semble pas travailler pour moi.


D'accord avec la Menace, pour CDT sur Luna, cela ne semble pas fonctionner, l'ajout de LD_Library_Path semble avoir l'effet souhaité comme décrit par Monzie



3
votes

Selon ce que @zuafi a suggéré, vous n'avez pas à grep pour les bibliothèques et `localiser 'pour les trouver.

Enregistrez la sortie de la strace dans un fichier: P>

open("/real/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = 3 (any value here)


0 commentaires

3
votes

Si vous avez défini ld_library_path et cela ne fonctionne pas. Fermez les éclips et passez à partir du terminal de commande. J'ai accidentellement constaté que cela pourrait le faire fonctionner. Pas sûr de la raison, mais j'ai probablement quelque chose à voir avec l'initialisation des éclips.


2 commentaires

Au fait, j'utilise la version Luna d'Eclipse


Je suppose que c'est parce que les sources de terminal ~ / .CASHRC lors du lancement et que vous aviez export ld_library_path dans ce fichier.