Ya, libcmt adalah (salah satu dari beberapa) implementasi perpustakaan standar C yang disediakan dengan kompiler Microsoft. Mereka menyediakan versi "debug" dan "rilis" dari tiga jenis pustaka dasar: single-threaded (selalu terhubung secara statis), multi-threaded yang terhubung secara statis , dan multi-threaded yang terhubung secara dinamis (meskipun, tergantung pada versi kompiler yang Anda menggunakan, beberapa di antaranya mungkin tidak ada).
Jadi, dalam nama "libcmt", "libc" adalah nama tradisional (kurang lebih) untuk pustaka C. "Mt" berarti "multi-utas". Versi "debug" akan memiliki "d" yang ditambahkan di akhir, memberikan "libcmtd".
Sejauh fungsi apa yang dicakupnya, standar C (bagian 7, jika Anda benar-benar peduli) mendefinisikan serangkaian fungsi yang harus disediakan oleh implementasi yang sesuai (dihosting). Sebagian besar vendor (termasuk Microsoft) menambahkan sendiri berbagai fungsi lainnya (untuk kompatibilitas, untuk memberikan kemampuan yang tidak ditangani oleh fungsi standar, dll.) Dalam kebanyakan kasus, ini juga akan berisi beberapa fungsi "internal" yang digunakan oleh kompiler tetapi tidak biasanya oleh pengguna akhir.
Jika Anda ingin mendapatkan daftar lengkap fungsi di "libcmt" (untuk menggunakan contoh Anda), Anda bisa membuka salah satu perintah perintah Visual Studio (di bawah "Visual Studio Tools", biasanya), beralih ke direktori di mana perpustakaan Anda berada diinstal, dan ketik sesuatu seperti: lib -list libcmt.lib
dan itu akan menghasilkan daftar ( panjang ) dari semua file objek di pustaka itu. Itu tidak selalu berhubungan langsung dengan nama fungsi, tetapi umumnya akan memberikan ide. Jika Anda ingin melihat file objek tertentu, Anda dapat menggunakan lib -extract
untuk mengekstrak salah satu file objek tersebut, lalu gunakan dumpbin /symbols <object file name>
untuk menemukan fungsi apa yang ada dalam file objek tertentu.
strcpy
fungsi dari pustaka standar C, misalnya, apakah implementasinya di pustaka runtime, atau apakah hanya memiliki kodenya dalam file c normal?Pada awalnya, kita harus memahami apa itu Perpustakaan Runtime; dan pikirkan apa yang dimaksud dengan "Perpustakaan Microsoft C Runtime".
lihat: http://en.wikipedia.org/wiki/Runtime_library
Saya telah memposting sebagian besar artikel di sini karena mungkin akan diperbarui.
sumber
Saya hanya bertanya sendiri dan melukai otak saya selama beberapa jam. Masih tidak menemukan apa pun yang benar-benar ada benarnya. Setiap orang yang menulis sesuatu pada suatu topik tidak dapat benar-benar "mengajar". Jika Anda ingin mengajar seseorang, ambillah bahasa yang paling dasar yang dipahami seseorang, jadi dia tidak perlu peduli dengan topik lain saat menangani suatu topik. Jadi saya sampai pada kesimpulan untuk diri saya sendiri yang tampaknya cocok dalam semua kekacauan ini.
Dalam bahasa pemrograman C, setiap program dimulai dengan
main()
fungsi. Bahasa lain mungkin mendefinisikan fungsi lain di mana program dimulai. Tetapi prosesor tidak tahumain()
. Sebuah prosesor hanya tahu perintah yang telah ditentukan, diwakili oleh kombinasi dari0
dan1
.Dalam pemrograman mikroprosesor, tidak memiliki sistem operasi yang mendasarinya (Microsoft Windows, Linux, MacOS, ..), Anda perlu memberi tahu prosesor secara eksplisit di mana harus mulai dengan mengatur
ProgramCounter
(PC) yang diulang dan dilompati (loop, panggilan fungsi) di dalam perintah yang dikenal prosesor. Anda perlu tahu seberapa besar RAM, Anda perlu mengatur posisi tumpukan program (variabel lokal), serta posisi tumpukan (variabel dinamis) dan lokasi variabel global (saya kira itu disebut SSA ?) dalam RAM. Sebuah prosesor tunggal hanya dapat menjalankan satu program pada satu waktu.Di situlah sistem operasi masuk. Sistem operasi itu sendiri adalah program yang berjalan pada prosesor. Program yang memungkinkan eksekusi kode khusus. Menjalankan banyak program sekaligus dengan beralih di antara kode eksekusi program (yang dimuat ke dalam RAM). Tetapi sistem operasinya ADALAH PROGRAM, setiap program ditulis secara berbeda. Cukup dengan memasukkan kode program khusus Anda ke dalam RAM tidak akan menjalankannya, sistem operasi tidak mengetahuinya. Anda perlu memanggil fungsi pada sistem operasi yang mendaftarkan program Anda, beri tahu sistem operasi berapa banyak memori yang dibutuhkan program, di mana titik masuk ke dalam program berada (
main()
fungsi dalam kasus C). Dan inilah yang saya kira terletak di Perpustakaan Runtime, dan menjelaskan mengapa Anda memerlukan perpustakaan khusus untuk setiap sistem operasi, karena ini hanyalah program itu sendiri dan memiliki fungsi yang berbeda untuk melakukan hal-hal ini.Ini juga menjelaskan mengapa itu TIDAK terkait secara dinamis saat runtime seperti
.dll
file, bahkan jika itu disebut Perpustakaan RUNTIME. Perpustakaan Runtime perlu ditautkan secara statis, karena itu diperlukan saat memulai program Anda. Perpustakaan Runtime menyuntikkan / menghubungkan program kustom Anda ke / ke program lain (sistem operasi) di RUNTIME. Ini benar-benar menyebabkan ...Kesimpulan: Perpustakaan RUNTIME gagal dalam penamaan. Mungkin tidak ada
.dll
(menghubungkan saat runtime) di masa-masa awal dan masalah memahami perbedaan sama sekali tidak ada. Tetapi bahkan jika ini benar, nama itu dipilih dengan buruk.Nama yang lebih baik untuk Runtime Library dapat berupa: StartupLibrary / OSEntryLibrary / SystemConnectLibrary / OSConnectLibrary
Saya harap saya benar, untuk koreksi / ekspansi. Bersulang.
sumber
C adalah bahasa dan dalam definisinya, tidak perlu ada fungsi yang tersedia untuk Anda. Tidak ada IO, tidak ada rutinitas matematika dan sebagainya. Secara konvensional, ada satu set rutin yang tersedia untuk Anda yang dapat Anda tautkan ke executable Anda, tetapi Anda tidak perlu menggunakannya. Namun, ini adalah hal yang umum dilakukan sehingga sebagian besar penghubung tidak meminta Anda untuk menautkan ke pustaka runtime C lagi.
Ada kalanya Anda tidak menginginkannya - misalnya, dalam bekerja dengan sistem embedded, mungkin tidak praktis untuk memiliki malloc, misalnya. Saya dulu bekerja menanamkan PostScript ke dalam printer dan kami memiliki perpustakaan runtime kami sendiri yang jauh lebih bahagia di sistem embedded, jadi kami tidak repot dengan "standar".
sumber
Perpustakaan runtime adalah perpustakaan yang secara otomatis dikompilasi untuk setiap program C yang Anda jalankan. Versi pustaka yang akan Anda gunakan tergantung pada kompiler, platform, opsi debugging, dan opsi multithreading Anda.
Deskripsi yang baik dari berbagai pilihan untuk pustaka runtime: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
Ini mencakup fungsi-fungsi yang biasanya Anda anggap tidak perlu perpustakaan untuk memanggil:
Microsoft memiliki daftar fungsi runtime library yang bagus:
http://msdn.microsoft.com/en-us/library/2aza74he(VS.71).aspx
Daftar fungsi yang tepat akan bervariasi tergantung pada kompiler, jadi untuk iOS Anda akan mendapatkan fungsi lain seperti dispatch_async () atau NSLog ().
sumber
Jika Anda menggunakan alat seperti Dependency Walker pada executable yang dikompilasi dari C atau C ++, Anda akan melihat bahwa salah satu DLL yang menjadi sandarannya adalah MSVCRT.DLL. Ini adalah Perpustakaan Microsoft C Runtime. Jika Anda memeriksa MSVCRT.DLL lebih lanjut dengan DW, Anda akan melihat bahwa ini adalah tempat semua fungsi seperti printf (), menempatkan (0, mendapat (), atoi () dll hidup.
sumber
Saya pikir definisi Microsoft sangat berarti:
sumber
Ada tiga bentuk pustaka C Run-time yang disediakan dengan Win32 SDK:
Microsoft Visual C ++ edisi 32-bit berisi tiga bentuk ini juga, namun, CRT dalam DLL bernama MSVCRT.LIB. DLL dapat didistribusikan kembali. Namanya tergantung pada versi VC ++ (yaitu MSVCRT10.DLL atau MSVCRT20.DLL). Perhatikan bahwa MSVCRT10.DLL tidak didukung pada Win32s, sedangkan CRTDLL.LIB didukung pada Win32s. MSVCRT20.DLL hadir dalam dua versi: satu untuk Windows NT dan yang lainnya untuk Win32s.
lihat: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9
sumber