Perpustakaan untuk hal-hal standar (yaitu: cout, dll) *PERTANYAAN BARU* :)

Saya bertanya-tanya tentang perpustakaan C standar yang berisi semua fungsi/definisi seperti abs(), cout stream, printf, dll.

Saya familiar dengan file header (stdio.h, cmath.h, time.h, dll) tetapi sepertinya tidak ada .lib atau .dll yang sesuai di mana pun (mis. stdio.lib, time.dll , dll).

Di manakah kode sebenarnya untuk fungsi-fungsi dalam file header ini? Apakah saya salah memahami sesuatu? Apakah ada satu file lib besar yang berisi semua hal standar, atau satu untuk setiap header?

Bantuan apa pun dihargai!!

Terima kasih!


person Russel    schedule 08.07.2010    source sumber
comment
Perpustakaan Standar C tidak akan memiliki cout atau aliran.   -  person James McNellis    schedule 08.07.2010


Jawaban (5)


Itu tergantung pada implementasinya. Di Windows, fungsionalitas perpustakaan standar ada di C dan pustaka waktu proses C++. Pustaka runtime C selalu ditautkan secara otomatis; pustaka runtime C++ ditautkan secara otomatis jika Anda menyertakan salah satu header pustaka standar.

person James McNellis    schedule 08.07.2010

Jika Anda menggunakan Linux/beberapa varian UNIX/AIX coba gunakan ldd . Hanya untuk bersenang-senang mencoba sesuatu yang baru, ketik ldd `which ls` di prompt Linux Anda. Inilah yang saya dapatkan:

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)

Jalur tersebut akan memberi tahu Anda dari mana perpustakaan bersama diambil. Jika Anda menggunakan Windows, dapatkan depend.exe http://www.dependencywalker.com/ -- alat yang luar biasa

person Fanatic23    schedule 08.07.2010

Biasanya Anda tidak perlu menautkan pustaka runtime C atau C++ secara eksplisit. Biasanya kompiler akan memanggil linker dengan opsi yang benar untuk melakukannya untuk Anda.

Faktanya, dengan gcc, Anda harus melakukan sesuatu agar tidak menyertakan pustaka default (seperti menggunakan -nodefaultlibs, -nostdlib, atau -nostartfiles).

Lokasi sebenarnya dari perpustakaan standar, termasuk apakah itu dalam satu file atau tidak, merupakan masalah implementasi.

person paxdiablo    schedule 08.07.2010
comment
libgcc bukan perpustakaan standar; itu beberapa implementasi kode internal yang digunakan gcc untuk pembagian panjang dan sebagainya. Perpustakaan standar biasanya disebut libc. - person R.. GitHub STOP HELPING ICE; 08.07.2010

Seperti yang disebutkan Arpan, Anda dapat menggunakan ldd (yang ada dalam paket 'binutils') untuk menemukan file SO apa yang sebenarnya digunakan untuk libc. Implementasi yang paling umum pada sistem Linux adalah pustaka GNU C, biasanya disebut glibc.

person Sam Hanes    schedule 08.07.2010

Jika Anda menyebutkan DLL, saya berasumsi Anda menggunakan Windows. Dalam hal ini, biasanya ada satu DLL "runtime" yang dikirimkan bersama kompiler. Dengan Visual C++, saya yakin namanya msvcrt.dll atau serupa.

person Miro A.    schedule 08.07.2010
comment
Program dapat menggunakan lebih dari satu dll. Namanya msvcr**.dll, msvcp**.dll. Yaitu. msvcr80.dll, msvcr90.dll, dan seterusnya. - person SigTerm; 08.07.2010