2013-06-13 33 views
6

Khi tôi biên dịch tệp .cu với nvcc 5.0, trình biên dịch cung cấp cho tôi thông tin sau.bỏ qua libcudart.so không tương thích khi tìm kiếm -lcudart

/usr/bin/ld: bỏ qua /usr/local/cuda-5.0/lib/libcudart.so không tương thích khi tìm kiếm -lcudart

Dường như hoặc là một cảnh báo hoặc lỗi. Tôi không biết vấn đề là gì.

Có ai biết thêm chi tiết về thông tin này không?

+0

Bạn đang cố gắng biên dịch mã 64 bit? Nếu vậy, bạn cần liên kết với phiên bản 64 bit phải nằm trong '/ usr/local/cuda-5.0/lib64/libcudart.so'. – BenC

Trả lời

10

Cảnh báo này thường xảy ra khi cố liên kết mã 64 bit với thư viện 32 bit, xem câu hỏi này: Skipping Incompatible Libraries at compile.

Bạn cần phải phân biệt các file 2 thư viện:

  • $CUDA_HOME/lib/libcudart.so, phiên bản 32-bit của thư viện cudart.
  • $CUDA_HOME/lib64/libcudart.so, phiên bản 64 bit của thư viện cudart.

(trong trường hợp của bạn, $CUDA_HOME/usr/local/cuda-5.0)

Về cơ bản, các mối liên kết tìm thấy thư viện 32-bit đầu tiên (-L tùy chọn được tìm kiếm theo thứ tự) và trả về cảnh báo rằng ngay cả khi nó kết thúc việc tìm kiếm thích hợp thư viện.

Bạn có thể cần thêm $CUDA_HOME/lib64 vào biến môi trường LD_LIBRARY_PATH trước $CUDA_HOME/lib để ld có thể tìm thấy thư viện thích hợp cho kiến ​​trúc 64 bit của bạn trước phiên bản 32 bit.

+1

Cảm ơn bạn. Hệ điều hành làm việc của tôi là 64-bit, vì vậy tất cả các mã của tôi sẽ được biên dịch và liên kết đến 64-bit. Có vẻ lạ rằng CUDA5.0 64 bit bao gồm các thư viện 32 bit. – konjac

+1

Trên hệ điều hành 64 bit, bạn cũng có thể tạo và chạy các ứng dụng 32 bit, vì vậy bạn cần có 'libcudart.so' 32 bit cho điều đó. – BenC

+1

Tôi dường như có cùng một vấn đề. 'LD_LIBRARY_PATH' của tôi có' lib64' trước 'lib', do đó dường như không hoạt động trên hệ thống của tôi. Bất kỳ ý tưởng? –

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