Title Image

Blog Logo

Static Library vs. Shared Library

🌱 Static Library vs. Shared Library

    👉 Library - thư viện là một tập hợp các file (chứa các hàm) để user dùng cho các chương trình khác nhau.

    Thư viện bao gồm các file header (.h) chứa user-defined data types, macro, fucntion prototypes và các file.c tương ứng triển khai các hàm đó.

    Một thư viện có thể bao gồm 1 hoặc nhiều object files, mang tính re-use và nhiều có nhiều lợi ích khác.

    👉 2 loại thư viện là static và shared sử dụng quá trình linking mình có share ở bài viết này

    🌱 Static Library

    Thư viện liên kết tĩnh - một file chứa các object được build từ source code (complier - time), các file objects này chứa các define của functions, variables.

    Những file Static Libraries có thể được linked với các file objects khác để tạo thành 1 file thư viện khác hoặc 1 file executable.

  • Thường được cung cấp dưới dạng các file thư viện đã được build sẵn (.a, .lib) cùng với các file headers tương ứng.
  • Các application sử dụng thư viện phải include header files và link tới các file thư viện.
  • Nếu lib có sự thay đổi và ứng dụng đang sử dụng lib đó muốn cập nhật sự thay đổi thì bắt buộc phải build lại cả ứng dụng 🙁

    Static Lib dùng trong quá trình build của 1 chương trình nhúng: Link truy cập

    Bên cạnh đó, nếu bạn mong muốn đóng gói một chương trình của mình thành một thư viện cho người khác sử dụng, nhưng lại không muốn họ biết source code của mình, thì Static Library là một phương án hữu hiệu. Một số người thường build library source của mình thành một Static Library (file .a) và cung cấp cho người dùng kèm các Header Files để họ sử dụng. 

    Thông thường thì các IDE sẽ hỗ trợ chúng ta Link các Lib này với các file object rồi, bằng cách trỏ đến folder chứa file .a. Nếu không chúng ta sẽ phải làm điều đó trong Makefile.

    Các bạn có thể tham khảo các tạo và sử dụng Static Library tại video này của mình:

    🌱 Shared Library / Dynamic Library

    Thư viện liên kết động là file chứa các objects được build từ source code, các file objects này chứa các define của functions, variables.

    👉 Cái này giống với static lib. Khác ở chỗ chúng được load vào file executable của application lúc runtime.

    Vì nhiều chương trình có thể sử dụng chung các thư viện này nên nó được gọi là Shared Libraries.

    Khác với Static Lib, Shared Lib thường được dùng trong các ứng dụng máy tính nhiều hơn. Thường thì khi chơi game online chắc hẳn chúng ta sẽ thỉnh thoảng bắt gặp thiếu một file .dll nào đó. Đó chính là các Shared Library, thường thì chúng được build như các biến môi trường/các bản cập nhật/vá lỗi để game/ứng dụng hoạt động. 

    Khi ta cài ứng dụng thì các file .dll này thường đi kèm với file .exe (Đúng với nguyên tắc khi ta chạy file .exe - runtime thì mấy file .dll này mới được). Nếu thiếu một số chúng thì ứng dụng sẽ không thể hoạt động được. Và dù đã run game một vài lần, thì việc xóa chúng đi cũng khiến lần sau chúng ta không thể chơi game được 😂😂😂 Rõ ràng rồi, vì khi run thì chương trình mới tìm đến mấy file này mà.

    Các bạn có thể tham khảo các tạo và sử dụng Shared Library tại video này của mình:


    🌱 So sánh Static Library vs Shared Library

    👉 (Hình ảnh) Shared Library được lưu trong bộ nhớ và sẽ được các process ánh xạ đến khi cần. Trong khi mỗi process dùng thư viện static cần có 1 bản copy của nó.

  • Static library có ưu điểm hơn về mặt tốc độ thực thi nhưng shared library lại biên dịch nhanh hơn (xem lại phần static vs dynamic linking)
  • Shared library có kích thước chương trình thực thi nhỏ hơn (vì chỉ cần copy 1 lần)
  • Mỗi lần muốn update ứng dụng thì ứng dụng dùng static lib cần build lại cả chương trình, trong khi dùng shared lib chỉ cần nhớ build lại lib đó.

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

Đăng nhận xét

0 Nhận xét