2013-01-21 5 views
8

Su Ubuntu, ho un'app C++ in Eclipse. L'applicazione si compila bene e posso eseguire l'app dalla riga di comando.Impossibile aprire il file oggetto condiviso: Nessun file o directory di questo tipo; Esecuzione o debug in Eclipse

Ma quando cerco di eseguire il debug o eseguirlo con Eclipse, l'errore :

"Cannot open shared object file: No such file or directory" viene gettato su una libreria condivisa.

Ho impostato LD_LIBRARY_PATH nel mio file bashrc e anche impostare una variabile di ambiente LD_LIBRARY_PATH sia nella configurazione di esecuzione e configurazione di debug per:

/home/behlingb/Documents/api_libs/FileGDB_API/lib

Cos'altro mi manca qui per ottenere Eclipse per eseguire questo?



UPDATE

C'è solo un file oggetto condiviso questa applicazione richiede, e che file proviene da un terzo partito API di download. Ho appena scoperto che se metto l'oggetto condiviso nella directory in cui si trova l'eseguibile, eseguirà il debug in Eclipse. C'è un modo per specificare una directory diversa in modo da non dover copiare il file per ogni progetto?

+1

Penso che tu sia sulla strada giusta con l'impostazione di LD_LIBRARY_PATH in Esegui configurazione. Hai controllato per assicurarti che lo stai usando usando quella configurazione di esecuzione? In LiClipse, se fai clic sulla freccia grigia in basso, in basso, oltre alla freccia grande, con il cerchio verde, verso destra, bianca, puoi scegliere quale configurazione di esecuzione utilizzare. – BenB

+0

Ho trovato che Eclipse CDT (neon.3) non è molto "stabile". A volte, ctrl + freccia non funziona. La chiusura della finestra lo corregge. A volte, LD_LIBRARY_PATH non è aggiunto a ciò che ho chiesto. Il riavvio lo corregge. – Hei

risposta

2

è possibile utilizzare strace utilità (e quindi grep per open e/o stat chiamate) per ottenere l'elenco dei .so file necessari per eseguire dovrebbe occupare, quindi utilizzare locate (o trovare tra i pacchetti) per scoprire l'espletamento effettivo delle richieste lib

10

Sto usando la versione Kepler di Eclipse.

  1. In Eclipse su Esegui quindi eseguire il debug Configurazioni
  2. Fare clic sulla scheda ambiente
  3. Fare clic su Nuovo
  4. Aggiungere LD_LIBRARY_PATH e impostare il valore nella directory che contiene la libreria
  5. riavviare Eclipse
1

Ciò è valido con Eclipse Kepler (non ho esaminato le versioni precedenti). Per consentire al debugger di caricare le librerie condivise, il tentativo di impostare LD_LIBRARY_PATH avrà esito negativo. Tuttavia il plugin CDT fornisce un librerie condivise lista per questo scopo

Esegui menù ->Debug Configurazioni ...

quindi nella finestra di configurazione

C/C++ Applicazione ->progetto ->Debugger scheda -> Biblioteche condivise scheda

The Kepler dialog for adding debug shared libraries

+0

Sembra proprio che dovrebbe essere la risposta corretta. L'ho provato su Marte e non sembra funzionare per me. – Menace

2

Secondo quanto @zuafi suggerito, non c'è bisogno di grep per le librerie e `locate' per trovarli.

Invece salvare l'output di strace in un file:

strace -o my_output_file.txt /path/to/my_executable_file 

quindi aprire il file, dove si possono vedere

open("https://stackoverflow.com/a/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 

scorrimento verso il basso quelle linee fino a colpire

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

questo significa prima di trovare /real/path/to/some/library.so ci sono stati diversi tentativi per trovare library.so in percorsi diversi. ma finalmente la libreria è stata trovata in /real/path/to/some/.

Basta copiare e incollare questo in Eclipse!

3

Se è stato impostato LD_LIBRARY_PATH e non funziona. Chiudi Eclipes ed eseguilo dal terminale di comando. Ho scoperto casualmente che questo potrebbe farlo funzionare. Non sei sicuro del motivo, ma probabilmente hai qualcosa a che fare con l'inizializzazione di Eclipes.

+0

A proposito, sto usando la versione di Luna di Eclipes – Northern

+0

Suppongo che questo sia dovuto a sorgenti terminali ~/.bashrc al momento del lancio, e che tu avevi "esportato LD_LIBRARY_PATH" in questo file. – Efreeto