Được rồi, tôi có một câu hỏi CUDA 5.0 thực sự đáng lo ngại về cách liên kết mọi thứ đúng cách. Tôi thực sự biết ơn vì sự giúp đỡ nào!Cách liên kết mã máy chủ với thư viện CUDA tĩnh sau khi biên dịch tách rời?
Sử dụng tính năng biên dịch có thể tách rời của CUDA 5.0, tôi đã tạo một thư viện tĩnh (* .a). Điều này liên kết độc đáo với các tập tin * .cu khác khi chạy qua nvcc, tôi đã làm điều này nhiều lần.
Bây giờ tôi muốn lấy tệp * .cpp và liên kết nó với mã máy chủ trong thư viện tĩnh này bằng cách sử dụng g + + hoặc bất kỳ thứ gì, nhưng không phải là nvcc. Nếu tôi cố gắng này, tôi nhận được lỗi biên dịch như
tài liệu tham khảo không xác định để __cudaRegisterLinkedBinary
Tôi đang sử dụng cả hai -lcuda
và -lcudart
và, theo tôi biết, có các thư viện theo đúng thứ tự (có nghĩa là -lmylib -lcuda -lcudart
). Tôi không nghĩ rằng đó là một vấn đề với điều đó. Có lẽ tôi sai, nhưng tôi cảm thấy tôi đang thiếu một bước và rằng tôi cần phải làm một cái gì đó khác để thư viện tĩnh của tôi (thiết bị liên kết?) Trước khi tôi có thể sử dụng nó với g + +.
Tôi đã bỏ lỡ điều gì đó quan trọng? Điều này thậm chí có thể?
Câu hỏi thưởng: Tôi muốn kết quả cuối cùng là thư viện động. Làm thế nào tôi có thể đạt được điều này?
add '-lcudadevrt' –
Tôi đã cố gắng đó, nó đã không không làm gì cả. Lệnh thực tế tôi đang sử dụng là: g ++ -pthread -shared -Wl, -O1 -Wl, -Bsymbolic-functions -Wl, -Bsymbolic-functions -Wl, -z, relro mycpplib.o mycudalib.a -L/usr/local/cuda-5.0/lib64 -L/usr/local/cuda-5.0/lib -lmystaticlib -lcuda -lcudart -lcudadevrt -o mylinkedlib.so - Tôi đang cố tạo một mô-đun Python cho thư viện CUDA của tôi. – user2333829
Lỗi về __cudaRegisterLinkedBinary không xác định thực sự xảy ra khi tôi cố gắng nhập mô-đun Python. g ++ thực sự biên dịch mọi thứ mà không cần phàn nàn. – user2333829