Search…

Static Link Library và Dynamic Link Library

07/11/20203 min read
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++.

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

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024