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

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 140584 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Ada enam jenis perpustakaan dapat digunakan kembali:
  • Single statis Threaded perpustakaan (Debug/Release)
  • Perpustakaan Multithreaded statis (Debug/Release)
  • Dinamis Link 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 reusable perpustakaan atau pengguna perpustakaan menggunakan beberapa benang, kemudian Perpustakaan harus sejenis multithread-aman perpustakaan.

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

Tabel berikut menunjukkan beralih kompiler yang harus digunakan untuk bangunan masing-masing enam jenis perpustakaan dapat digunakan kembali (semua jenis DLL aman-multithread). Setiap proyek yang menggunakan perpustakaan yang dapat digunakan kembali harus menggunakan kompiler sama beralih. Ketika menggunakan kompilator /ML(default), MLd, /MT, MTd, /MD, atau /MDd switch, Kompilator tempat nama perpustakaan standar (terdaftar di bawah Perpustakaan kolom) dalam file objek.
Reusable Library            Switch    Library    Macro(s) Defined
----------------------------------------------------------------
Single Threaded             /ML       LIBC       (none)
Static MultiThread          /MT       LIBCMT     _MT
Dynamic Link (DLL)          /MD       MSVCRT     _MT and _DLL
Debug Single Threaded       /MLd      LIBCD      _DEBUG
Debug Static MultiThread    /MTd      LIBCMTD    _DEBUG and _MT
Debug Dynamic Link (DLL)    /MDd      MSVCRTD    _DEBUG, _MT, and _DLL
				
Anda dapat melihat objek modul untuk menentukan saklar yang digunakan ketika dibangun 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 sama jenis dan karena itu sama kompiler saklar. Macro didefinisikan (atau tidak ditetapkan) untuk masing-masing kompiler switch dapat digunakan dalam header file dari perpustakaan Anda dapat digunakan kembali untuk menegakkan beralih kompiler tepat. The kode contoh dalam artikel ini menunjukkan cara menggunakan makro ini.

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

Jika Anda memilih untuk campuran CRT perpustakaan, ingat bahwa Anda memiliki dua salinan CRT, dengan Serikat terpisah dan berbeda, jadi Anda harus berhati-hati tentang apa yang Anda mencoba untuk melakukan di perbatasan CRT. Ada banyak cara untuk 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) jika modul dihasilkan mencoba untuk menggabungkan lebih dari satu salinan dari CRT perpustakaan. Untuk informasi lebih lanjut, Cari berkas Bantuan LNK4098.

Kode sampel

Kode berikut dapat digunakan dalam file header perpustakaan dapat digunakan kembali untuk memastikan 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
				

Properti

ID Artikel: 140584 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbcrt kbhowto kbmt KB140584 KbMtid
Penerjemahan Mesin
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

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com