Bagaimana untuk menghubungkan dengan perpustakaan C Run-Time (CRT) benar

PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.

Klik disini untuk melihat versi Inggris dari artikel ini:140584
Artikel ini telah diarsipkan. Artikel ditawarkan dalam bentuk "apa adanya" dan tidak akan dapat diperbarui lagi.
RINGKASAN
Ada enam jenis perpustakaan dapat digunakan kembali:
  • Single statis Threaded perpustakaan(Debug/Release)
  • Perpustakaan Multithreaded statis (Debug/Release)
  • DinamisLink Perpustakaan (DLL)(Debug/Release)
Catatan Masing-masing perpustakaan memiliki versi debug dan versi rilis.

DLL multithread-aman dan versi tunggal-benang CRT perpustakaan tidak disediakan untuk dll. Jika reusableperpustakaan atau pengguna perpustakaan menggunakan beberapa benang, kemudianPerpustakaan harus sejenis multithread-aman perpustakaan.

Catatan Debug perpustakaan dan kompiler switch /MLd, /MTd, dan /MDd adalah hanyatersedia dalam Visual C++ versi 4.0 dan kemudian.

Tabel berikut menunjukkan beralih kompiler yang harus digunakan untuk bangunanmasing-masing enam jenis perpustakaan dapat digunakan kembali (semua jenis DLL aman-multithread). Setiap proyek yang menggunakan perpustakaan yang dapat digunakan kembali harus menggunakan kompiler samaberalih. Ketika menggunakan kompilator /ML(default), MLd, /MT, MTd, /MD, atau /MDdswitch, Kompilator tempat nama perpustakaan standar (terdaftar di bawahPerpustakaan kolom) dalam file objek.
Reusable Library            Switch    Library    Macro(s) Defined----------------------------------------------------------------Single Threaded             /ML       LIBC       (none)Static MultiThread          /MT       LIBCMT     _MTDynamic Link (DLL)          /MD       MSVCRT     _MT and _DLLDebug Single Threaded       /MLd      LIBCD      _DEBUGDebug Static MultiThread    /MTd      LIBCMTD    _DEBUG and _MTDebug Dynamic Link (DLL)    /MDd      MSVCRTD    _DEBUG, _MT, and _DLL				
Anda dapat melihat objek modul untuk menentukan saklar yang digunakan ketikadibangun dengan menggunakan perintah ini:
   dumpbin /all <object>.obj				
Lihat di bagian yang berjudul MENTAH DATA # 1. Di kolom paling kanan,Perpustakaan default akan tercantum.
INFORMASI LEBIH LANJUT
Sebuah perpustakaan yang dapat digunakan kembali dan semua pengguna yang harus menggunakan perpustakaan CRT samajenis dan karena itu sama kompiler saklar. Macro didefinisikan (atau tidakditetapkan) untuk masing-masing kompiler switch dapat digunakan dalam headerfile dari perpustakaan Anda dapat digunakan kembali untuk menegakkan beralih kompiler tepat. Thekode contoh dalam artikel ini menunjukkan cara menggunakan makro ini.

Jika Anda ingin pengguna perpustakaan untuk dapat memilih statis atau DLLCRT, Anda harus menyediakan statis dan jenis perpustakaan dapat digunakan kembali DLL.

Jika Anda memilih untuk campuran CRT perpustakaan, ingat bahwa Anda memiliki duasalinan CRT, dengan Serikat terpisah dan berbeda, jadi Anda harusberhati-hati tentang apa yang Anda mencoba untuk melakukan di perbatasan CRT. Ada banyak carauntuk mendapat masalah dengan dua CRT. Berikut adalah beberapa:
  • Ada dua tumpukan terpisah. Anda tidak dapat mengalokasikan (secara eksplisit dengan yang baru, malloc, atau begitu - atau secara implisit dengan strdup, strstreambuf::str, atau lebih di), dan kemudian melintasi pointer batas CRT dibebaskan.
  • Anda tidak dapat menangani FILE * atau file melintasi batas CRT dan mengharapkan "Stdio tingkat rendah IO" untuk bekerja.
  • Anda tidak dapat menetapkan lokal di salah satu dan mengharapkan lokal yang lain harus set.
Dimulai dengan Visual C++ 4.0, linker akan mengeluarkan peringatan (LNK4098) jikamodul dihasilkan mencoba untuk menggabungkan lebih dari satu salinan dari CRTperpustakaan. Untuk informasi lebih lanjut, Cari berkas Bantuan LNK4098.

Kode sampel

Kode berikut dapat digunakan dalam file header perpustakaan dapat digunakan kembali untukmemastikan konsisten menggunakan saklar kompiler benar:
// MyReusableStaticSingleThreadReleaseLibrary.h#if defined(_MT) || defined(_DEBUG)    #error The /ML compiler switch is required.#endif// MyReusableStaticMultithreadReleaseLibrary.h#if !defined(_MT) || defined(_DLL) || defined(_DEBUG)    #error The /MT compiler switch is required.#endif// MyReusableDynamicLinkReleaseLibrary.h#if !defined(_MT) || !defined(_DLL) || defined(_DEBUG)    #error The /MD compiler switch is required.#endif// MyReusableStaticSingleThreadDebugLibrary.h#if defined(_MT) || !defined(_DEBUG)    #error The /MLd compiler switch is required.#endif// MyReusableStaticMultithreadDebugLibrary.h#if !defined(_MT) || defined(_DLL) || !defined(_DEBUG)    #error The /MTd compiler switch is required.#endif// MyReusableDynamicLinkDebugLibrary.h#if !defined(_MT) || !defined(_DLL) || !defined(_DEBUG)    #error The /MDd compiler switch is required.#endif				

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 140584 - Tinjauan Terakhir: 12/04/2015 12:31:23 - Revisi: 2.0

Microsoft Visual C++ 2.1, Microsoft Visual C++ 2.2, Microsoft Visual C++ 4.0 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbcrt kbhowto kbmt KB140584 KbMtid
Tanggapan