Làm th? nào đ? liên k?t v?i thư vi?n c l?n ch?y (CRT) chính xác

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 140584 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Có sáu lo?i s? d?ng l?i thư vi?n:
  • T?nh đơn lu?ng thư vi?n (G? l?i/phát hành)
  • Thư vi?n Multithreaded t?nh (Debug/phát hành)
  • Năng đ?ng Liên k?t thư vi?n (DLL)(Debug/Release)
Chú ý M?i thư vi?n có m?t phiên b?n g? l?i và m?t phiên b?n phát hành.

DLL là multithread-an toàn và m?t phiên b?n đ?a đơn-s?i c?a thư vi?n CRT không đư?c cung c?p cho DLLs. N?u reusable thư vi?n ho?c b?t k? ngư?i dùng nào c?a thư vi?n s? d?ng nhi?u ch? đ?, sau đó các thư vi?n c?n ph?i là m?t lo?i multithread-an toàn thư vi?n.

Chú ý G? l?i thư vi?n và tr?nh biên d?ch chuy?n m?ch /MLd, /MTd và /MDd ch? có s?n trong các phiên b?n Visual C++ 4.0 và sau này.

B?ng dư?i đây cho th?y mà tr?nh biên d?ch chuy?n nên đư?c s? d?ng đ? xây d?ng m?i ngư?i trong s? sáu lo?i s? d?ng l?i thư vi?n (DLL t?t c? các lo?i đư?c multithread-safe). B?t k? d? án s? d?ng thư vi?n tái s? d?ng nên s? d?ng cùng m?t tr?nh biên d?ch chuy?n đ?i. Khi s? d?ng tr?nh biên d?ch /ML(default), MLd, /MT, MTd, /MD, ho?c /MDd thi?t b? chuy?n m?ch, tr?nh biên d?ch đ?t tên thư vi?n m?c đ?nh (đư?c li?t kê dư?i các Thư vi?n c?t) trong t?p tin đ?i tư?ng.
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
				
B?n có th? xem m?t mô-đun đ?i tư?ng đ? xác đ?nh chuy?n đ?i mà s? d?ng khi nó đư?c xây d?ng b?ng cách s? d?ng l?nh này:
   dumpbin /all <object>.obj
				
T?m trong ph?n có tiêu đ? nguyên DATA # 1. Trong c?t bên ph?i ph?n l?n, các thư vi?n m?c đ?nh s? đư?c li?t kê.

THÔNG TIN THÊM

M?t thư vi?n tái s? d?ng và t?t c? ngư?i s? d?ng nên s? d?ng cùng m?t màn h?nh CRT thư vi?n các lo?i và do đó cùng m?t tr?nh biên d?ch chuy?n. Các macro đư?c đ?nh ngh?a (hay không đ?nh ngh?a) cho m?i c?a tr?nh biên d?ch chuy?n m?ch có th? đư?c s? d?ng trong tiêu đ? (các) t?p c?a thư vi?n c?a b?n s? d?ng l?i đ? thi hành các chuy?n đ?i thích h?p tr?nh biên d?ch. Các m?u m? trong bài vi?t này ch?ng t? làm th? nào đ? s? d?ng các macro.

N?u b?n mu?n ngư?i s? d?ng thư vi?n đ? có kh? năng ch?n t?nh ho?c DLL CRT, b?n nên cung c?p c? t?nh và DLL tái s? d?ng thư vi?n lo?i.

N?u b?n ch?n đ? tr?n CRT thư vi?n, h?y nh? r?ng b?n có hai riêng bi?t b?n sao c?a CRT, v?i riêng bi?t và khác bi?t k?, do đó, b?n ph?i c?n th?n v? nh?ng g? b?n c? g?ng làm trên màn h?nh CRT ranh gi?i. Có r?t nhi?u cách đ? nh?n đư?c vào r?c r?i v?i hai CRTs. Dư?i đây là ch? là m?t vài:
  • Có hai riêng bi?t heaps. B?n không th? c?p phát (m?t cách r? ràng v?i m?i, malloc, hay như v?y vào--ho?c ng?m v?i strdup, strstreambuf::str, hay như v?y trên), và sau đó vư?t qua con tr? qua m?t màn h?nh CRT ranh gi?i đ? đư?c gi?i thoát.
  • B?n không th? vư?t qua m?t x? l? t?p tin * ho?c t?p tin trên m?t màn h?nh CRT ranh gi?i và mong đ?i "Stdio ? đ? cao th?p IO" đ? làm vi?c.
  • B?n không th? thi?t l?p mi?n đ?a phương trong m?t và mong đ?i c?a các mi?n đ?a phương đư?c thi?t l?p.
B?t đ?u v?i Visual C++ 4.0, linker s? phát hành m?t c?nh báo (LNK4098) n?u m?t mô-đun k?t qu? c? g?ng đ? k?t h?p nhi?u hơn m?t b?n sao c?a CRT thư vi?n. Đ? bi?t thêm chi ti?t, t?m ki?m các t?p tin tr? giúp cho LNK4098.

Mã mẫu

M? sau đây có th? đư?c s? d?ng trong t?p tin tiêu đ? c?a thư vi?n tái s? d?ng đ? đ?m b?o vi?c s? d?ng phù h?p c?a các chuy?n đ?i đúng tr?nh biên d?ch:
// 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
				

Thu?c tính

ID c?a bài: 140584 - L?n xem xét sau cùng: 18 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • 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
T? khóa: 
kbcrt kbhowto kbmt KB140584 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:140584

Cung cấp Phản hồi

 

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