/ usr / bin / ld: ไม่พบ -lOpenCL


10

ขณะพยายามรวบรวมโปรแกรมง่ายๆที่กำหนดใน OpenCL จากนี้เว็บไซต์ มันจะให้สิ่งDeviceInfoที่ฉันต้องการ หลังจากเรียกเพียง a makeฉันได้รับข้อผิดพลาดด้านล่าง:

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

ตอนนี้ผมได้ติดตั้งโดยใช้คำแนะนำจากนี้เว็บไซต์ อย่างไรก็ตามฉันยังคงได้รับข้อผิดพลาดข้างต้น

ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?

คำตอบ:


14

คุณ linker ไม่พบOpenCLห้องสมุด

คุณควรช่วยลิงเกอร์ที่จะหาOpenCLห้องสมุด

ปัญหาที่คล้ายกันถูกยกขึ้นที่นี่

วิธีแก้ปัญหาคือสร้างลิงก์สำหรับไลบรารีไปยังตำแหน่ง lib ที่รู้จัก:

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

ตัวเลือกอื่น:

สมมติว่าOpenCLไลบรารีที่อยู่ใน/usr/lib/x86_64-linux-gnu/คุณสามารถเพิ่มโฟลเดอร์ไลบรารีไปยังเส้นทางไลบรารี:

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

คุณอาจต้องอัปเดต "Dynamic Linker":

sudo ldconfig

1
สิ่งนี้ได้ผลสำหรับฉัน! คำตอบแรก ๆ ขอบคุณ!
Sharan Duggirala

3

ตามที่ Yaron ระบุไว้แล้วตัวลิงก์ไม่ทราบว่าจะหาห้องสมุด OpenCL ได้จากที่ใด

แทนที่จะย้ายไปยังหนึ่งในสถานที่เหล่านั้น (เช่น/usr/lib) ฉันขอแนะนำให้แจ้งลิงเกอร์ว่าจะหาที่ไหนผ่าน-Lธง คำสั่งจะอ่าน (หมายเหตุ-L/usr/lib/x86_64-linux-gnu)

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

หากคุณใช้ลายมือMakefileคุณสามารถแก้ไขคำสั่งคอมไพเลอร์ / ลิงเกอร์ได้เช่นนี้ มิฉะนั้นคุณจะต้องสัมผัสระบบการสร้างของคุณวิธีการรวมมัน


หรือลองใช้LDFLAGSเช่นmake 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver

หากคุณกำลังมองหาวิธีการแก้ปัญหาชั่วคราวอย่างหมดจดนี้จะทำเคล็ดลับ อย่างไรก็ตามฉันแนะนำให้ทำLDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/เพื่อรักษาการตั้งค่าก่อนหน้านี้
mbeyss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.