ห้องสมุดสำหรับสิ่งมาตรฐาน (เช่น: cout ฯลฯ ) *คำถาม NEWBIE* :)

ฉันสงสัยเกี่ยวกับไลบรารี C มาตรฐานที่มีฟังก์ชัน/คำจำกัดความทั้งหมด เช่น abs(), cout streams, printf เป็นต้น

ฉันคุ้นเคยกับไฟล์ส่วนหัว (stdio.h, cmath.h, time.h ฯลฯ ) แต่ดูเหมือนว่าจะไม่มี .lib หรือ .dll ที่เกี่ยวข้องเลย (เช่น stdio.lib, time.dll ฯลฯ)

รหัสจริงสำหรับฟังก์ชันในไฟล์ส่วนหัวเหล่านี้อยู่ที่ไหน ฉันเข้าใจอะไรผิดหรือเปล่า? มีไฟล์ lib ขนาดใหญ่หนึ่งไฟล์ที่บรรจุสิ่งที่เป็นมาตรฐานทั้งหมดหรือหนึ่งไฟล์สำหรับแต่ละส่วนหัว?

ความช่วยเหลือใด ๆ ที่ชื่นชม !!

ขอบคุณ!


person Russel    schedule 08.07.2010    source แหล่งที่มา
comment
ไลบรารีมาตรฐาน C จะไม่มี cout หรือสตรีม   -  person James McNellis    schedule 08.07.2010


คำตอบ (5)


ขึ้นอยู่กับการดำเนินการ บน Windows ฟังก์ชันไลบรารีมาตรฐานอยู่ใน C และไลบรารีรันไทม์ C++ ไลบรารีรันไทม์ C จะถูกเชื่อมโยงโดยอัตโนมัติเสมอ ไลบรารีรันไทม์ C++ จะถูกเชื่อมโยงโดยอัตโนมัติหากคุณรวมหนึ่งในส่วนหัวของไลบรารีมาตรฐาน

person James McNellis    schedule 08.07.2010

หากคุณอยู่บน Linux/UNIX/AIX บางรุ่น ให้ลองใช้ ldd เพียงเพื่อความสนุกสนานในการลองสิ่งใหม่ๆ ใน ldd `ซึ่ง ls` ในพรอมต์ Linux ของคุณ นี่คือสิ่งที่ฉันได้รับ:

librt.so.1 => /lib/tls/librt.so.1 (0x0084c000)
libacl.so.1 => /lib/libacl.so.1 (0x40022000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00289000)
libc.so.6 => /lib/tls/libc.so.6 (0x00a0b000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00c57000)
/lib/ld-linux.so.2 (0x009ec000)
libattr.so.1 => /lib/libattr.so.1 (0x40028000)

เส้นทางควรบอกคุณว่าไลบรารีที่แบ่งใช้มาจากที่ใด หากคุณใช้ Windows ให้รับdependence.exe http://www.dependencywalker.com/ -- เครื่องมือที่ยอดเยี่ยม

person Fanatic23    schedule 08.07.2010

โดยทั่วไปคุณไม่จำเป็นต้องเชื่อมโยงไลบรารีรันไทม์ C หรือ C++ อย่างชัดเจน โดยปกติแล้วคอมไพเลอร์จะเรียกตัวเชื่อมโยงพร้อมตัวเลือกที่ถูกต้องเพื่อทำเพื่อคุณ

ในความเป็นจริง เมื่อใช้ gcc คุณต้องดำเนินการบางอย่างเพื่อไม่รวมไลบรารีเริ่มต้นไว้ด้วย (เช่น การใช้ -nodefaultlibs, -nostdlib หรือ -nostartfiles)

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

person paxdiablo    schedule 08.07.2010
comment
libgcc ไม่ใช่ไลบรารีมาตรฐาน มันเป็นโค้ดการใช้งานภายใน gcc บางส่วนที่ใช้สำหรับการหารยาวและสิ่งต่าง ๆ ไลบรารีมาตรฐานมักเรียกว่า libc - person R.. GitHub STOP HELPING ICE; 08.07.2010

ดังที่ Arpan กล่าวไว้ คุณสามารถใช้ ldd (ซึ่งอยู่ในแพ็คเกจ 'binutils') เพื่อค้นหาไฟล์ SO ใดที่ถูกใช้สำหรับ libc การใช้งานที่พบบ่อยที่สุดบนระบบ Linux คือ ไลบรารี GNU C ซึ่งปกติเรียกว่า glibc

person Sam Hanes    schedule 08.07.2010

หากคุณพูดถึง DLL ฉันถือว่าคุณกำลังใช้ Windows ในกรณีนี้ โดยปกติจะมี DLL "รันไทม์" หนึ่งตัวที่มาพร้อมกับคอมไพเลอร์ ด้วย Visual C++ ฉันเชื่อว่าชื่อคือ msvcrt.dll หรือคล้ายกัน

person Miro A.    schedule 08.07.2010
comment
โปรแกรมอาจใช้ dll มากกว่าหนึ่งตัว ชื่อคือ msvcr**.dll, msvcp**.dll เช่น. msvcr80.dll, msvcr90.dll และอื่นๆ - person SigTerm; 08.07.2010