ทำไมต้องพึ่งพา libc แม้จะเป็น -nostdlib

Sep 12 2020

ฉันต้องการควบคุมการพึ่งพา libc ระหว่างการสร้างไลบรารีที่ใช้ร่วมกันของฉัน

ดังนั้นฉันจึงแนะนำ -nostdlib ในบรรทัดคำสั่ง (ด้วยเสียงดัง 8 หรือ gcc 9 มันเหมือนกัน)

ใช้งานได้ถ้าฉันไม่เชื่อมโยง lib ของฉันกับไลบรารีที่ใช้ร่วมกันอื่น ๆ (libossp-uuid เพื่อตั้งชื่อ)

แต่ไม่ใช่กับ -lossp-uuid

cc -fPIC -shared -nostdlib -olibmain.so   main.c -L/usr/local/lib -lossp-uuid -I/usr/local/include

ldd แสดงการอ้างอิงกับ libc.so.7

ldd ./libmain.so
./libmain.so:
        libossp-uuid.so.16 => /usr/local/lib/libossp-uuid.so.16 (0x80066f000)
        libc.so.7 => /lib/libc.so.7 (0x80024a000)

คำถามคือทำไมฉันทำไม่ได้ มีวิธีแก้ปัญหา

ขอบคุณมากสำหรับข้อเสนอแนะที่ชาญฉลาด นี่เป็นความลึกลับที่ยิ่งใหญ่สำหรับฉัน

คำตอบ

1 FlorianWeimer Sep 13 2020 at 22:00

libossp-uuid.so.16พึ่งพาดูเหมือนจะเกิดจาก คุณจะต้องสร้างห้องสมุดนั้นด้วย-nostdlibเช่นกัน