CodeBlocks ไม่พบไลบรารีที่ใช้ร่วมกันแม้ว่าจะมีการตั้งค่าเส้นทางการค้นหาก็ตาม

ฉันมีโปรเจ็กต์ C++ ขั้นพื้นฐานในบล็อคโค้ดที่ใช้ glfw.so และไลบรารีอื่นอีกสองไลบรารีที่คอมไพล์เป็นไฟล์ .so จากโปรเจ็กต์อื่น libHorde3D.so และ libHorde3DUtils.so ส่วนหลังถูกวางไว้ในโฟลเดอร์รูทของโปรเจ็กต์ ในขณะที่ glfw อยู่ที่ไหนสักแห่งใน /usr/lib ของฉัน (ฉันคิดว่า)

ฉันได้เพิ่มโฟลเดอร์โครงการลงในเส้นทางการค้นหาตัวเชื่อมโยงและคอมไพเลอร์ในบล็อคโค้ด ฉันได้เพิ่ม libHorde3D.so และ libHorde3DUtils.so รวมถึง glfw.so ลงในไลบรารีลิงก์ในแท็บการตั้งค่า Linker แล้ว ฉันคิดว่านี่จะเพียงพอแล้วจากคำถามที่คล้ายกันก่อนหน้านี้ใน stackoverflow

อย่างไรก็ตามเมื่อฉันกด build:

ld cannot find -lHorde3D.so
ld cannot find -lHorde3DUtils.so
ld cannot find -lglfw.so

ระบบของฉันคือ Arch Linux 64 และฉันใช้ GCC ฉันยังลอง bopy libHorde3D.so และ libHorde3DUtils.so ใน /usr/lib และ /usr/lib64 โดยไม่สำเร็จ

ป.ล. เส้นทางการค้นหาทั้งหมดจะถูกคัดลอกข้ามเป้าหมาย Debug และ Release


person Kiril    schedule 24.07.2012    source แหล่งที่มา
comment
คุณไม่ควรใส่ .so เป็นแฟล็กลิงเกอร์ ใช้มันเหมือน -llibrary..   -  person Aftnix    schedule 24.07.2012
comment
หมายเหตุด้านข้าง: ตั้งค่าตัวเลือก CodeBlocks เพื่อแสดงบรรทัดคำสั่งแบบเต็มระหว่างการสร้างโปรเจ็กต์ ซึ่งจะช่วยแก้ไขปัญหาประเภทนี้   -  person Alex F    schedule 24.07.2012


คำตอบ (2)


สมมติว่า หากชื่อไลบรารีคือ libmylibrary.so ตัวเลือกตัวเชื่อมโยงที่จะเชื่อมโยงกับไลบรารีนั้นจะมีลักษณะเป็น -lmylibrary โปรดทราบว่าไม่มีคำนำหน้า lib และส่วนต่อท้าย .so — พวกมันจะถูกเพิ่มโดยอัตโนมัติโดยตัวเชื่อมโยง ในกรณีของคุณ ดูเหมือนว่าคุณระบุชื่อผิด ลองลบ .so ออกจากมัน ซึ่งน่าจะแก้ปัญหาได้

ต่อไปนี้เป็นการสาธิตง่ายๆ เกี่ยวกับวิธีการกระตุ้นความล้มเหลวโดยทำข้อผิดพลาดที่คล้ายกัน:

$ echo 'int main() { return 0; }' > test.c
$ gcc -o test ./test.c -lc
$ gcc -o test ./test.c -lc.so
/usr/bin/ld: cannot find -lc.so
collect2: ld returned 1 exit status
$ 

คำสั่งแรกสำเร็จและคำสั่งที่สอง (ที่มีชื่อไลบรารีไม่ถูกต้อง) ล้มเหลว

person Community    schedule 24.07.2012
comment
คำตอบทั้งสองถูกต้องและแก้ไขข้อผิดพลาดโง่ ๆ ของฉัน ขอบคุณ! - person Kiril; 24.07.2012

คุณต้องไม่ผ่าน ".so" ตัวเลือกตัวเชื่อมโยงคือ

-lHorde3D -lHorde3DUtils -lglfw

วิธีนี้ตัวเชื่อมโยงจะค้นหา "libHorde3D.so" ฯลฯ ในเส้นทางไลบรารี

person steffen    schedule 24.07.2012