Cách tạo thư viện trong c

     
Chào chúng ta đang theo dõi khóa đào tạo và huấn luyện lập trình trực tuyến ngữ điệu C++.

Bạn đang xem: Cách tạo thư viện trong c

Thư viện (library) là 1 tập mã nguồn đã làm được đóng gói, có thể được tái sử dụng trong tương đối nhiều chương trình khác nhau.

Thư viện trong ngôn từ C++ có 2 yếu tố chính:

Những header files khai báo các hàm có thể được thực hiện trong chương trình.Tập hòa hợp mã nguồn đã làm được biên dịch thành mã máy tương ứng với phần định nghĩa của những hàm đã có được khai báo trong những header files.

Nhiều tủ sách khi hỗ trợ đã được biên dịch sẵn bởi vì nhiều lý do. Thông thường, hi hữu khi gồm sử chỉnh sửa trong phần thư viện, nên không nhất thiết phải biên dịch các lần. Thư viện cũng khá được biên dịch sẵn thành mã máy nhằm tránh người dùng truy cập và chỉnh sửa.

Có 2 loại thư viện: thư viện liên kết tĩnh (static library) cùng thư viện links động (dynamic library) .

Trong bài học kinh nghiệm này, bọn họ sẽ tò mò xem thư viện links động là gì? biện pháp sử dụng như vậy nào? Và cùng thử tạo thành một thư viện liên kết động đến riêng mình.

Thư viện liên kết động (dynamic library)

Thư viện link động là tập hợp các hàm, tác dụng được thiết lập lên chương trình của khách hàng trong thời điểm chương trình sẽ thực thi. Khi biên dịch chương trình có thực hiện thư viện liên kết động, phiên bản thân thư viện đó sẽ không còn trở thành 1 phần trong lịch trình thực thi, tuy thế nó biến hóa một đơn vị chức năng riêng biệt.

Trên hệ điều hành và quản lý Windows, chúng ta cũng có thể thấy hầu như file gồm phần mở rộng .dll viết tắt của “dynamic-link library”. Trên hệ điều hành quản lý Linux, thư viện link động bao gồm phần không ngừng mở rộng .so viết tắt của “shared object”.

Ưu điểm của thư viện link động:

Tiết kiệm bộ nhớ lưu trữ lưu trữ thư viện trên ổ cứng: các tiến trình hoàn toàn có thể sử dụng phổ biến một thư viện liên kết động.Khi chức năng trong thư viện link động gắng đổi, chương trình sử dụng thư viện đó không nhất thiết phải biên dịch lại.Chương trình viết trên nhiều ngôn từ lập trình không giống nhau hoàn toàn có thể gọi đến cùng một thư viện links động.

Tuy nhiên, thư viện liên kết động cũng có nhược điểm:

Chương trình gồm yêu cầu sử dụng thư viện link động sẽ không thể xúc tiến khi không tìm thấy thư viện tương ứng.Giảm công suất trong quy trình chương trình đang chạy, bởi vì khi công dụng trong tủ sách được gọi, lịch trình cần thời hạn để tìm kiếm và tải lên RAM.

Bây giờ, chúng ta cùng nhau làm mỗi bước để tạo nên một thư viện liên kết động đối chọi giản.

Tạo một dự án công trình để thi công thư viện links động

Chúng ta cùng tạo ra một Project mới bằng phương pháp chọn File -> New -> Project :


*

Tại đây, với Visual Studio 2015/2017, mình lựa chọn kiểu Project là Dynamic-Link Library , viết tên là MathDLL. Tủ sách này vẫn chứa một số trong những hàm toán học solo giản.

Sau khi thừa nhận OK, Visual Studio IDE sẽ tạo nên ra một dự án công trình mới với cấu tạo như bên dưới. Thời điểm này, chúng ta chưa cần suy nghĩ chúng làm gì.


*

Sau khi build thử dự án này, tác dụng biên dịch sẽ tiến hành xuất ra trong 1 file có tên là MathDLL.dll như bên dưới:


*

Vì mình đã để ở chế độ build Debug, phải file thư viện này sẽ nằm trong thư mục Debug, và cân xứng với những dự án không giống ở trong chính sách build Debug.

*

Sau này, chúng ta cũng nên build thêm một bạn dạng Release, phiên bản này sẽ dùng để làm phân phối tới những lập trình viên khác thực hiện để Release thành phầm của họ.

Tiếp theo, các bạn bấm chuột phải vào project hiện nay tại, lựa chọn Properties . Các bạn vào Configuration Properties -> C/C++ -> Preprocessor cùng xem vào phần Preprocessor Definations :


*

Nếu chúng ta nhìn thấy MATHDLL_EXPORTS trong danh sách Preprocessor Definations, chúng ta không cần sửa đổi gì thêm. Nếu khách hàng thấy MathDLL_EXPORTS hoặc tương tự, chúng ta vào sửa lại thành MATHDLL_EXPORTS.

Xem thêm: Mua Tivi 40 Inch Giá Bao Nhiều, Mua Tivi 40 Inch 32 Inch 37 Inch

Đến đây, coi như họ đã thành công xuất sắc trong bước đầu tạo một thư viện link động. Nếu gồm trục trặc gì xảy ra, chúng ta nên xem lại trước lúc đến với phần tiếp theo.

Tạo phần header file mang lại thư viện

Bây giờ, chúng ta cùng tạo ra một header file chứa phần khai báo mang lại các tác dụng trong thư viện:


*

Mình để tên cho header file này là MathLib.h nhằm mục tiêu khai báo một số hàm đo lường và thống kê cơ bản. Với dưới đó là code mang lại header file:

#pragma once​#ifdef MATHDLL_EXPORTS#define MATHDLL_API __declspec(dllexport)#else#define MATHDLL_API __declspec(dllimport)#endif​extern "C" MATHDLL_API double Add(double a, double b);​extern "C" MATHDLL_API double Sub(double a, double b);​extern "C" MATHDLL_API double Mul(double a, double b);​extern "C" MATHDLL_API double Div(double a, double b);Đến đây, có lẽ một số thứ khá mới đối với chúng ta mới học tập lập trình.

Ví dụ, extern “C” có nghĩa là gì? Đây là cách để những hàm viết trong ngôn từ C++ hoàn toàn có thể sử dụng được trong những chương trình viết trên ngôn ngữ C. Những bạn bài viết liên quan ở đây.

Và định nghĩa MATHDLL_API cùng với __declspec(dllexport) với __declspec(dllimport) nhằm mục đích gì? chúng ta còn nhớ ở trong phần trên, khi bọn họ tạo Project để tạo ra thư viện liên kết động, họ có vào phần Preprocessor Definations để kiểm tra xem có tồn trên cờ (flag) mang tên là MATHDLL_EXPORTS hay không phải không?

Cờ MATHDLL_EXPORTS này đã chỉ trường tồn trong Project MathDLL (tên bản thân đặt) mình vừa tạo, và nó sẽ hiếm khi bị trùng với phần đông cờ trong số project khác.

Vậy, trong dự án tạo thư viện link động này, chúng ta sẽ chất vấn xem nếu bao gồm tồn tại cờ MATHDLL_EXPORTS , thì sẽ thực hiện khai báo __declspec(dllexport) để báo mang lại compiler biết rằng bọn họ muốn xuất những tác dụng này ra tệp tin .dll .

Và trong số những project khác, sẽ không tồn tại cờ MATHDLL_EXPORTS , thì khai báo __declspec(dllimport) để báo mang đến compiler biết rằng những hàm đó sẽ được tải lên tự thư viện liên kết động trong quy trình chương trình thực thi.

Xây dựng phần định nghĩa mang lại các công dụng trong thư viện

Sau khi sản xuất Project MathDLL , họ sẽ thấy file MathDLL.cpp đã được thêm vào sẵn. Chúng ta không rất cần được tạo thêm file .cpp nào khác. Hoặc nếu như các bạn có nhu cầu tạo thêm, và đặt tên theo cách chúng ta dễ hiểu cũng được cả.

Trong tệp tin MathDLL.cpp mình định nghĩa các hàm như sau:

// MathDLL.cpp : Defines the exported functions for the DLL application.//​#include "stdafx.h"#include "MathLib.h"​double Add(double a, double b) return a + b;​double Sub(double a, double b) return a - b;​double Mul(double a, double b) return a * b;​double Div(double a, double b) return a / b;Sử dụng thư viện link động trong chương trình của bạnLúc này, bọn họ cùng test biên dịch lại thư viện một lần nữa.

*

Kết trái biên dịch thành công xuất sắc nghĩa là bạn đã có một thư viện links động cho riêng mình.

Điều bọn họ cần quan liêu tâm bây giờ là làm sao để thực hiện thư viện này trong dự án công trình hoặc công tác khác.

Mình quay lại với project mẫu tôi đã tạo trước đó:


Mình đã clean sạch sẽ, còn chỉ để lại một tệp tin main.cpp để dùng thử thư viện mình vừa tạo ra.

Để thuận tiện hơn trong quy trình liên kết thư viện, chúng ta cùng sản xuất một folder include cùng thư mục lib vào thư mục cất project hiện hành. Một vài ba bước tiếp theo khá kiểu như với việc links thư viện liên kết tĩnh.

Thư mục include đã chứa các header files của thư viện. Trong thư viện MathDLL , họ chỉ có tạo nên một header file duy nhất, nên chỉ cần copy file đó vào trong folder include vừa tạo ra của chương trình của những bạn:

*

Và thư mục lib sẽ chứa file thư viện đang biên dịch:

*

Bây giờ, bọn họ sẽ vào phần Properties của dự án để thông số kỹ thuật liên kết thư viện link động.

Các bạn nhấn vào phải vào dự án, lựa chọn Properties -> C/C++ -> General , vào phần Additional Include Directories , chúng ta trỏ mang lại thư mục include chứa header file của tủ sách mà chúng ta đã copy vào đó:

*

Tiếp đến, lựa chọn Properties -> Linker -> General , trong phần Additional Library Directories , các bạn trỏ cho thư mục lib đựng file thư viện đã biên dịch mà chúng ta đã copy vào đó:

*

Cũng trong cửa sổ Properties, các bạn chọn thẻ Linker -> Input , tìm tới dòng Additional Dependencies :

*

Trong phần này, chúng ta điền vào tên các thư viện buộc phải dùng trong công tác kèm theo phần đuôi mở rộng nha.

Chạy chương trình

Bây giờ đồng hồ thì thực hiện các công dụng trong tủ sách thôi những bạn. Trong file main.cpp mình sử dụng đơn giản dễ dàng như sau:

#include #include "MathLib.h"​int main(){std::cout cơ hội này, các bạn biên dịch, và chạy lịch trình sẽ gặp lỗi như sau:


Còn một câu hỏi các bạn cần phải làm là copy tệp tin .dll (theo dự án công trình mình thực hiện là MathDLL.dll) của tủ sách vào trong thư mục cất file triển khai (.exe) của dự án:

*

Như chúng ta thấy, thư viện links động là 1 phần tách biệt so với lịch trình thực thi.

Xem thêm: Mua Quà Đầy Tháng Cho Bé Trai Và Bé Gái Ý Nghĩa Và Thiết Thực Nhất

Hẹn gặp mặt lại các bạn trong bài học tiếp theo trong khóa học lập trình C++ phía thực hành.