/ usr / bin / ld: không thể tìm thấy -lOpenCL


10

Hiện đang cố gắng biên dịch một chương trình đơn giản được đưa ra trong OpenCL từ trang web này . Nó sẽ cho tôi yêu cầu DeviceInfomà tôi cần. Sau khi chỉ cần gọi a make, tôi nhận được lỗi bên dưới:

sharan@sharan-X550CC:~/opencl-ex/Ex1$ make 
g++ DeviceInfo.cpp -I ../../Cpp_common  -lOpenCL -o DeviceInfo
/usr/bin/ld: cannot find -lOpenCL
collect2: error: ld returned 1 exit status
Makefile:23: recipe for target 'DeviceInfo' failed
make: *** [DeviceInfo] Error 1

Bây giờ tôi đã cài đặt bằng cách sử dụng các hướng dẫn từ trang web này . Tuy nhiên, tôi vẫn nhận được lỗi ở trên.

Làm thế nào tôi có thể giải quyết lỗi này?

Câu trả lời:


14

Bạn liên kết không thể tìm thấy OpenCLthư viện.

Bạn nên giúp người liên kết tìm OpenCLthư viện.

Vấn đề tương tự đã được nêu ra ở đây

Giải pháp là tạo một liên kết cho thư viện đến một vị trí lib đã biết:

sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so

Một lựa chọn khác:

Giả sử rằng OpenCLthư viện nằm trong /usr/lib/x86_64-linux-gnu/bạn cũng có thể thêm thư mục thư viện vào đường dẫn Thư viện:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/"

Bạn có thể cần cập nhật "Liên kết động":

sudo ldconfig

1
Điều này làm việc cho tôi! Câu trả lời đầu tiên. Cảm ơn bạn!
Sharan Duggirala

3

Như Yaron đã nêu, trình liên kết không biết tìm thư viện OpenCL ở đâu, tức là nó không ở nơi nào mà nó tìm kiếm.

Thay vì di chuyển nó đến một trong những nơi đó (ví dụ /usr/lib) tôi sẽ đề nghị thông báo cho người liên kết nơi tìm kiếm thông qua -Lcờ. Lệnh sau đó sẽ đọc (lưu ý -L/usr/lib/x86_64-linux-gnu)

g++ DeviceInfo.cpp -I ../../Cpp_common -L/usr/lib/x86_64-linux-gnu -lOpenCL -o DeviceInfo

Nếu bạn đang sử dụng một bản viết tay, Makefilebạn có thể chỉ cần sửa đổi lệnh trình biên dịch / liên kết như thế này. Nếu không, bạn sẽ phải chạm vào hệ thống xây dựng của bạn làm thế nào để bao gồm nó.


hoặc thử LDFLAGSví dụmake 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver

Nếu bạn đang tìm kiếm một giải pháp hoàn toàn tạm thời, điều này cũng sẽ thực hiện được mẹo. Tuy nhiên tôi khuyên bạn nên làm cho nó LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/để duy trì bất kỳ cài đặt nào trước đó
mbeyss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.