2013-02-24 35 views
9

Tôi đang cố gắng để gỡ lỗi một chương trình CUDA, nhưng khi tôi đang tung ra gdb như vậy:Làm cách nào để tải thêm thư viện cho GDB?

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

tôi nhận được:

/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 

(định dạng để có thể đọc)

(Tôi đang chạy gdb sử dụng Mxgdb) Nếu điều đó quan trọng, thì thư viện CUDA nằm trong số .bashrc

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

Nếu bạn muốn gỡ lỗi chương trình CUDA, bạn có ý định chạy 'gdb' hoặc' cuda-gdb' không? –

+0

Tôi không nghĩ rằng đó là nguyên nhân của vấn đề hiện tại của bạn với thư viện cudart, nhưng nếu, xuống đường, bạn muốn gỡ lỗi mã thiết bị, bạn nên sử dụng 'cuda-gdb' để thay thế. –

Trả lời

15

lỗi khi tải thư viện chia sẻ: libcudart.so.5.0

Lỗi này không có gì để làm với GDB: thực thi của bạn, khi chạy từ bên trong GDB, không thể tìm thấy thư viện cần thiết.

xuất khẩu LD_LIBRARY_PATH = "$ LD_LIBRARY_PATH:/usr/local/CUDA/lib64"

GDB chạy chương trình của bạn trong một mới $SHELL, do đó nên đã làm việc. Tôi tự hỏi nếu có một số tương tác với emacs.

Trong mọi trường hợp, điều này:

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

nên khắc phục vấn đề này.

Cập nhật:

như tôi đã đề cập đến nó trước, con đường ld được thiết lập đúng cách

Không, nó không phải là . Nếu nó là, bạn sẽ không có vấn đề.

Hiện tại, tôi không biết lý do tại sao nó không được đặt chính xác. Nếu bạn thực sự muốn tìm hiểu, hãy bắt đầu bằng cách chạy GDB bên ngoài các emacs (để loại trừ các tương tác emacs có thể).

Nếu vấn đề vẫn còn hiện diện, gdb show env, shell env, thêm echo "Here"-~/.basrc của bạn, vv sẽ giúp bạn tìm thấy nơi mà mọi thứ không làm việc như bạn mong đợi họ.

+0

Thủ thuật 'export' cũng hoạt động trên OS X với' DYLD_LIBRARY_PATH'. 'set env' không hoạt động trên OS X. – jww

1

gdb đang tìm thư viện, vậy tại sao bạn quan tâm đến đường dẫn bao gồm? Bạn có thể thử đặt tùy chọn gdb "solib-search-path" để trỏ đến vị trí của thư viện libcudart.so.5.0.

+0

Chỉ để vượt qua rõ ràng. Bạn có chắc chắn rằng thư viện bạn muốn có trong thư mục đó không? Bạn có chắc chắn rằng bạn đang xây dựng một ứng dụng 64 bit? Các quyền có được đặt chính xác không? Và tôi đoán bạn có thể chạy điều này khi bạn không sử dụng GDB? – anoneironaut

1

Tôi cũng gặp sự cố này. Một cách để xem xét nó là ngay cả khi biến LD_LIBRARY_PATH là chính xác khi bạn nhập show env vào gdb, nó có thể không chính xác khi bạn thực sự thực hiện chương trình vì gdb thực hiện $SHELL -c <program> để chạy chương trình. Hãy thử điều này như là một thử nghiệm, chạy $SHELL từ dòng lệnh và sau đó echo $LD_LIBRARY_PATH. Nó có đúng không? Nếu không, sau đó bạn có thể cần phải thêm nó vào rc của bạn (.tcshrc trong trường hợp của tôi).

2

Tôi gặp vấn đề tương tự khi cố gắng chạy gdb trên windows 7. Tôi sử dụng MobaXterm để truy cập hộp công cụ Linux. Tôi đã cài đặt gdb riêng biệt từ http://www.gnu.org/software/gdb/. Tôi đã nhận nó để làm việc bằng cách đảm bảo gdb có thể tìm thấy các tập tin .dll chính xác như đã đề cập bởi sử dụng tiếng Nga. Nếu bạn có MobaXterm cài đặt các tập tin .dll sẽ xuất hiện trong thư mục nhà của bạn trong MobaXterm/slash/bin.

gdb tuy nhiên không nhận ra biến số LD_LIBRARY_PATH. Đối với tôi, nó làm việc khi tôi sử dụng biến PATH thay vì:

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

Tôi nghĩ rằng sử dụng PATH thay vì LD_LIBRARY_PATH có thể làm việc cho bạn miễn là bạn đặt đúng đường dẫn vào thư viện của bạn.

+0

Biến PATH hoạt động cho tôi và LD_LIBRARY_PATH không cảm ơn. –

Các vấn đề liên quan