STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    Static Link Library và Dynamic Link Library

    Phân tích, tìm hiểu về giai đoạn liên kết thư viện liên kết tĩnh và thư viện liên kết động của chương trình C/C++.
    11/10/2015 07/11/2020 3 phút đọc
    Static Link Library và Dynamic Link Library

    Thư viện liên kết tĩnh

    Thư viện liên kết tĩnh có phần mở rộng là .lib. File này chứa mã nhị phân của mã nguồn sau khi được build.

    Tạo thư viện liên kết tĩnh

    Mở Visual Studio tạo một Empty Project bằng cách vào File > New > Project, sau đó chọn Empty Project, đặt tên và nhấn OK để tạo Project. 

    Tạo 1 thư viện toán học gồm 2 file, StdioMath.h chứa prototype gồm các hàm toán học cơ bản Add, Sub, Mul, Div và StdioMath.cpp chứa mã nguồn định nghĩa.

    File StidoMath.h

    int Add(int, int);
    int Sub(int, int);
    int Mul(int, int);
    int Div(int, int);

    Và file StdioMath.cpp

    #include "StdioMath.h"
    int Add(int a, int b)
    {
    	return a + b;
    }
    
    int Sub(int a, int b)
    {
    	return  a - b;
    }
    
    int Mul(int a, int b)
    {
    	return a * b;
    }
    
    int Div(int a, int b)
    {
    	return a / b;
    }

    Mở cửa sổ Properties bằng cách chuột phải vào tên project và chọn Properties. Mục Configuration Properties/General chọn Configuration Type, sau đó chọn kiểu ứng dụng muốn build. Ở đây chọn là Static library (.lib).

    Build Project để thấy kết quả.

    Vào thư mục Debug sẽ thấy file StaticLib.lib được tạo ra sau khi build project.

    Thư viện liên kết động

    Thư viện liên kết động gồm có 2 file:

    • File .lib chứa các thông tin cần thiết để hệ điều hành nạp thư viện dll và xác định các hàm export trong dll.
    • File .dll chứa chứa mã nhị phân của mã nguồn.

    Tạo thư viện liên kết động

    Tương tự như tạo thư viện liên kết tĩnh, tạo một project khác có tên là DynamicLib. Project này cũng có hai file là StdioMath.hStdioMath.cpp được viết như sau:

    File StdioMath.h

    int Add(int, int);
    int Sub(int, int);
    int Mul(int, int);
    int Div(int, int);

    File StdioMath.cpp

    #include "StdioMath.h"
    
    int Add(int a, int b)
    {
    	return a + b;
    }
    
    int Sub(int a, int b)
    {
    	return  a - b;
    }
    
    int Mul(int a, int b)
    {
    	return a * b;
    }
    
    int Div(int a, int b)
    {
    	return a / b;
    }

    Configuration Type chọn Dynamic Library (.dll). Sau đó build project để thấy kết quả.

    Mở thư mục Debug sẽ thấy hai file DynamicLib.libDynamicLib.dll

    Sử dụng thư viện liên kết

    Sử dụng thư viện liên kết tĩnh

    Tạo một project khác với tên là TestStaticLib. Copy 2 File StdioMath.h và thư viện StaticLib.lib được build ở project StaticLib vào project TestStaticLib.

    Chỉ thị cho trình biên dịch là cần link tới file StaticLib.lib bằng cách mở hộp thoại Properties.  Mục Configuration Properties/Input chọn Additional Dependences và gõ vào như sau:

    Hoặc có thể sử dụng chỉ thị ở đầu file chương trình.

    #pragma comment(lib, "StaticLib.lib")

    Sử dụng thư viện bằng cách include StidoMath.h và dùng như những hàm thông thường khác.

    #include "StdioMath.h"
    
    int main()
    {
    	int a = Add(5, 7);
    	int b = Sub(7, 8);
    	int c = Mul(7, 8);
    	int d = Div(7, 5);
    	return 0;
    }

    Sử dụng thư viện liên kết động

    Tạo một project khác với tên là TestDynamicLib. Copy 2 File StdioMath.h và thư viện StaticLib.lib được build ở project  DynamicLib vào project TestDynamicLib.

    Chỉ thị cho trình biên dịch là cần link tới file DynamicLib.lib bằng cách mở hộp thoại Properties. Mục Configuration Properties/Input chọn Additional Dependences và gõ vào như sau:

    Hoặc có thể sử dụng chỉ thị ở đầu file chương trình.

    #pragma comment(lib, "StaticLib.lib")

    Sử dụng thư viện tương tự đối với thư viện liên kết tĩnh.

    #include "StdioMath.h"
    
    int main()
    {
    	int a = Add(5, 7);
    	int b = Sub(7, 8);
    	int c = Mul(7, 8);
    	int d = Div(7, 5);
    	return 0;
    }
    

    Build và chạy chương trình. Nếu trong quá trình chạy xảy ra lỗi thiếu dll, copy file DynamicLib.dll build từ project DynamicLib sang thư mục debug của solution.

    Download demo

    STDIO_Lib_VS2013.zip

    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021