2013-02-24 9 views
9

Próbuję debugować program CUDA, ale kiedy jestem uruchamiania gdb tak:Jak załadować dodatkowe biblioteki dla GDB?

$ gdb -i=mi <program name> 
$ r <program arguments> 

Dostaję:

/home/wvxvw/Projects/cuda/exercise-1-udacity/cs344/HW2/hw: 
error while loading shared libraries: libcudart.so.5.0: 
cannot open shared object file: No such file or directory 

Process gdb-inferior killed 

(sformatowany dla czytelności)

(Używam gdb przy użyciu Mxgdb) Jeśli to ma znaczenie, biblioteki CUDA są w .bashrc

export PATH="/usr/local/cuda/bin:$PATH" 
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64" 
+0

Jeśli chcesz debugować program CUDA, masz zamiar uruchomić 'gdb' lub' cuda-gdb'? –

+0

Nie sądzę, że jest to przyczyną twojego obecnego problemu z biblioteką cudart, ale jeśli w trakcie drogi chcesz debugować kod urządzenia, powinieneś zamiast tego użyć 'cuda-gdb'. –

Odpowiedz

15

błąd podczas ładowania biblioteki współdzielone: ​​libcudart.so.5.0

Błąd ten nie ma nic wspólnego z GDB: plik wykonywalny, gdy uruchamiane od wewnątrz GDB, nie można znaleźć biblioteki potrzebuje.

export LD_LIBRARY_PATH = "$ LD_LIBRARY_PATH:/usr/local/CUDA/lib64"

GDB prowadzi swój program w nowej $SHELL, tak że powinny pracowali. Zastanawiam się, czy istnieje jakaś interakcja z emacs.

W każdym przypadku, to:

(gdb) set env LD_LIBRARY_PATH /usr/local/cuda/lib64 
(gdb) run 

powinno rozwiązać ten problem.

Aktualizacja:

jak już wspomniałem wcześniej, ścieżka ld jest ustawiony prawidłowo

Nie, to nie jest . Gdyby tak było, nie miałbyś problemu.

Teraz nie wiem dlaczego nie jest ustawiony prawidłowo. Jeśli naprawdę chcesz się tego dowiedzieć, zacznij od uruchomienia GDB poza emacs (aby wykluczyć możliwe interakcje emacs).

Jeśli problem nadal występuje, gdb show env, shell env, dodając echo "Here" do ~/.basrc itp powinien pomóc dowiedzieć się, gdzie coś nie działa jak ich spodziewać.

+0

Sztuczka 'export' działa na OS X z' DYLD_LIBRARY_PATH'. 'set env' nie działał na OS X. – jww

1

gdb szuka biblioteki, więc dlaczego martwi Cię ścieżka dołączania? Możesz spróbować ustawić opcję gdb "solib-search-path", aby wskazać lokalizację biblioteki libcudart.so.5.0.

+0

Po prostu minąć oczywiste. Czy jesteś pewien, że biblioteka, którą chcesz, znajduje się w tym katalogu? Czy jesteś pewien, że budujesz aplikację 64-bitową? Czy uprawnienia są ustawione poprawnie? I zgaduję, że jesteś w stanie uruchomić to, kiedy nie używasz GDB? – anoneironaut

1

Miałem również ten problem. Jednym ze sposobów na to jest to, że nawet jeśli zmienna LD_LIBRARY_PATH jest poprawna po wpisaniu show env do gdb, może nie być poprawna, gdy faktycznie wykonujesz program, ponieważ gdb wykonuje $SHELL -c <program>, aby uruchomić program. Wypróbuj to jako test, uruchom $SHELL z wiersza poleceń, a następnie echo $LD_LIBRARY_PATH. Czy to jest poprawne? Jeśli nie, to prawdopodobnie musisz dodać go do swojego rc (.tcshrc w moim przypadku).

2

Miałem podobny problem podczas próby uruchomienia gdb w systemie Windows 7. Używam MobaXterm, aby uzyskać dostęp do przybornika do systemu Linux. Zainstalowałem gdb oddzielnie od http://www.gnu.org/software/gdb/. Mam go do pracy, upewniając się, że gdb może znaleźć poprawne pliki .dll wymienione przez Employed Russian. Jeśli masz zainstalowane MobaXterm, pliki .dll powinny pojawić się w twoim katalogu domowym w MobaXterm/slash/bin.

gdb jednak nie rozpoznaje zmiennej LD_LIBRARY_PATH. Dla mnie to działało kiedy użyłem zmiennej PATH zamiast:

(gdb) set env PATH C:\Users\Joshua\Documents\MobaXterm\slash\bin 
    (gdb) run 

Myślę użyciu PATH zamiast LD_LIBRARY_PATH może pracować dla podałeś umieścić właściwą ścieżkę do biblioteki.

+0

Zmienna PATH działała dla mnie, a LD_LIBRARY_PATH nie dziękuje. –

Powiązane problemy