การพึ่งพา lib และลำดับของพวกเขา

ในบางครั้งหากเราไม่แสดงรายการ libs ตามลำดับที่แน่นอนภายใน makefile มันก็จะล้มเหลว

เหตุผลก็คือ - คำจำกัดความควรมาก่อนการใช้งาน

จะตรวจสอบคำสั่งซื้อที่ถูกต้องได้อย่างไร?


person hari    schedule 12.04.2011    source แหล่งที่มา


คำตอบ (2)


ที่จริงแล้ว เมื่อทำการลิงก์ไลบรารี การใช้งานควรมาก่อนคำจำกัดความ สัญลักษณ์ที่ยังไม่ได้แก้ไขใดๆ จำเป็นต้องทราบก่อนจึงจะประมวลผลไฟล์ไลบรารีที่ให้คำจำกัดความได้

สิ่งที่มาพร้อมกับคำสั่งซื้อ ฉันเกรงว่าคุณจะต้องดำเนินการด้วยตนเอง หาก libA ขึ้นอยู่กับ libB (เช่น libA ใช้สัญลักษณ์จาก libB) คุณจะต้องลิงก์ตามลำดับนี้: -lA -lB

นี่เป็นเรื่องของเอกสารเป็นส่วนใหญ่ ไลบรารีที่มีเอกสารอย่างดีจะระบุอย่างชัดเจนว่าไลบรารีอื่นนั้นขึ้นอยู่กับไลบรารีใด ดังนั้นคุณจึงสามารถทราบลำดับการเชื่อมโยงที่ถูกต้องได้

หากคุณไม่ต้องการอ่านเอกสารหรือไม่มีเอกสาร การลองผิดลองถูกก็เป็นทางเลือกเสมอ :)

person Petri Lehtinen    schedule 12.04.2011
comment
ขอบคุณ. นี่คือสิ่งที่ฉันต้องการยืนยันว่าไม่มีเวทย์มนตร์ที่จะบอกคุณเกี่ยวกับเรื่องนี้ - person hari; 13.04.2011

ฉันพบว่าสิ่งนี้น่ารำคาญเช่นกัน ฉันจำได้ว่าค้นหาเครื่องมือในการจัดเรียงให้ฉัน แต่ไม่พบสิ่งใดที่ช่วยได้

ในที่สุดฉันก็ตัดสินใจใช้วิธีเดรัจฉานบังคับ: หากคุณจะแสดงรายการ libs ทั้งหมดของคุณสองครั้งเช่น -lA -lB -lA -lB จะรับประกันว่าทุกไลบรารีจะแสดงรายการก่อน (และหลัง) ไลบรารีอื่นๆ ทั้งหมด

เมื่อได้รับไลบรารี $(LIST) คุณสามารถใช้ $(addprefix -l,$(LIST) $(LIST)) ได้

ไม่หรูหรามากนักและทำให้ขั้นตอนการเชื่อมโยงช้าลงบ้าง แต่ใช้งานได้

person Chen Levy    schedule 12.04.2011
comment
อืม ขอบคุณ แต่ฉันรู้วิธีนี้ซึ่งสามารถ UGLY ได้ถ้าคุณมี 15 libs :D - person hari; 13.04.2011
comment
@hari: คุณสามารถใช้ตัวเลือก --start-group และ --end-group (หรือ -( และ -)) รอบๆ รายการไลบรารี เพื่อหลีกเลี่ยงการซ้ำซ้อน ตามคู่มือ binutils พบว่ามีต้นทุนด้านประสิทธิภาพที่สำคัญ - person eriktous; 13.04.2011
comment
@eriktous: ใช่แล้ว ท้ายที่สุดแล้วก็ต้องมีคนทำให้แน่ใจว่าจะไม่เกิดซ้ำ - person hari; 14.04.2011