Theo khoa học máy tính, thư viện là một thuật ngữ dùng đểchỉ các tài nguyên (resources)
dùng đểphát triển phần mềm (software) hay chương trình (program). Các tài nguyên này có thểlà cácchương trình con (sobroutine), các class, các biến hay hằng số đãđược xây dựng sẵn. Nói một
cách đơn giản, chúng ta có thể xem chương trình là một đoạn chương trình đã được viết sẵn.
Trong đoạn chương trìnhđó đã khai báo và xây dựng các biến, hằng số, các hàm và các class. Khi xây dựng một chương trình mới, chúng ta có thểsử dụng lại các biến, hằng số, hàm hay class đã
được xây dựng trong thư viện bằng cách gọi thư viện trong chương trình.
Trong C++/CLI, chúng ta thường gặp các thư viện có dạng là cái tập tin có đuôi .h, tập tin
đuôi .lib hay .dll. Trước khi tìm hiểu về sự khác nhau giữa các thư viện .h, .lib và .dll, chúng ta hãy tìm hiểu vềquá trình dịch (compile) và thực thi (execute) một chương trình.
Hình trên mô tảquá trình dịch và thực thi một chương trình trong C++/CLI.
Biên dịch (Compile) là quá trình chuyển các câu lệnh được viết bằng một ngôn ngữ lập trình nàođó sang ngôn ngữ máy có thể được thi hành trực tiếp trên máy tính. Chương trình ngôn ngữ cấp cao được chuyển đổi được gọi là chương trình nguồn (source program) và chương trình ngôn ngữ máy được tạo ra được gọi là chương trình đối tượng (object program) hoặc mã đối
tượng (object code). Khi người dùng muốn chạy chương trình, chương trình đ ối tượng sẽ được nạp lên bộnhớchính của CPU và các chỉthị của chương trình sẽ được thi hành. Khi được hướng dẫn bởi các chỉthịcủa chương trình, CPU sẽtruy xuất dữliệu và tạo ra các kết quả. Cụthể, trong C++/CLI, biên dịch là quá trình chuyển từfile lập trình (file .cpp) sang file đối tượng (file .obj).
trong chương trình còn sửdụng các thư viện có sẵn. Do đó, cần phải kết hợp tất cảlại thành một file thực thi duy nhất, quá trình nàyđược gọi là liên kết (linker).
Liên kết (Linker) là quá trình kết hợp các file đối tượng được tạo ra từquá trình biên dịch
và các thư viện có sẵn thành một file thực thi duy nhất (file. Exe). Có hai kiểu liên kết là liên kết tĩnh (static linker) và liên kết động (dynamic linker).
Liên kết tĩnh :Các file .h, .cpp được dịch thành file .obj. Sau đó các file.obj được liên kết với nhau và liên kết với các file thư viện .lib. Cách này có ưu điểm là khi chạy chỉcần file .exe mà không cần thêm thư viện nào khác. Tuy nhiên có nhược điểm là file .exe có kích thước lớn, nặng.
Liên kết động : Cũng tương tự như liên kết tĩnh. Tuy nhiên khi liên kết, các file .lib chỉlà trung gian chứa thông tin giả. Các thông tin thật được lấy ra từcác file .dll trong quá trình thực
thi. Đo đó, khi thực thi, chương trình sẽ tự động liên kết đến các file .dll. Nếu thiếu các file .dll này thì quá trình thực thi sẽbịlỗi.
Các file .lib và .dll là hai loại thư viện thường gặp nhất trong C++/CLI : thư viện liên kết
động (dynamic linking library), thư viện liên kết tĩnh (static library).