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

     
Chào chúng ta đang quan sát và theo dõi khóa huấn luyện và đào tạo xây dựng trực tuyến ngôn ngữ C++.

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

Thỏng viện (library) là 1 trong tập mã mối cung cấp đã có được gói gọn, hoàn toàn có thể được tái áp dụng trong tương đối nhiều chương trình không giống nhau.

Thư viện trong ngữ điệu C++ gồm 2 nhân tố chính:

Những header files khai báo những hàm hoàn toàn có thể được áp dụng trong chương trình.Tập vừa lòng mã nguồn đã có biên dịch thành mã sản phẩm khớp ứng cùng với phần khái niệm của những hàm đã có knhì báo trong những header files.

Nhiều tlỗi viện khi cung cấp đã được biên dịch sẵn bởi những nguyên do. Đôi khi, thi thoảng lúc có sử chỉnh sửa trong phần thư viện, buộc phải không cần thiết phải biên dịch những lần. Thư viện cũng rất được biên dịch sẵn thành mã thứ nhằm tách người dùng truy cập với sửa đổi.

Có 2 phong cách thỏng viện: tlỗi viện liên kết tĩnh (static library) và thỏng viện link đụng (dynamic library) .

Trong bài học này, họ sẽ tìm hiểu coi tlỗi viện liên kết động là gì? Cách sử dụng như vậy nào? Và cùng thử tạo ra một thỏng viện liên kết đụng mang đến riêng bản thân.

Thư viện liên kết cồn (dynamic library)

Thỏng viện link đụng là tập phù hợp số đông hàm, công dụng được tải lên chương trình của người tiêu dùng trong những năm công tác vẫn thực thi. lúc biên dịch công tác gồm áp dụng tlỗi viện links đụng, bạn dạng thân tlỗi viện kia sẽ không còn biến một trong những phần trong lịch trình triển khai, nhưng mà nó thay đổi một đơn vị chức năng hiếm hoi.

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

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

Tiết kiệm bộ nhớ lưu trữ lưu trữ tlỗi viện bên trên ổ cứng: những các bước rất có thể áp dụng phổ biến một thư viện liên kết đụng.lúc công dụng vào thỏng viện link động thay đổi, công tác sử dụng thư viện đó không cần thiết phải biên dịch lại.Chương trình viết bên trên các ngữ điệu lập trình khác biệt có thể Hotline mang đến và một tlỗi viện links đụng.

Tuy nhiên, tlỗi viện link rượu cồn cũng đều có nhược điểm:

Chương trình tất cả yêu cầu áp dụng tlỗi viện liên kết rượu cồn sẽ không còn thể triển khai Khi không tìm thấy thỏng viện khớp ứng.Giảm năng suất vào quy trình lịch trình đang làm việc, bởi vì Lúc công dụng vào tlỗi viện được Hotline, lịch trình phải thời hạn để search tìm cùng cài đặt lên RAM.

Bây giờ, chúng ta cùng mọi người trong nhà làm cho từng bước nhằm tạo ra một tlỗi viện links rượu cồn đơn giản và dễ dàng.

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

Chúng ta cùng chế tạo một Project bắt đầu bằng phương pháp chọn File -> New -> Project :


*

Tại trên đây, cùng với Visual Studio 2015/2017, mình chọn kiểu dáng Project là Dynamic-Link Library , khắc tên là MathDLL. Thỏng viện này đang đựng một số trong những hàm tân oán học tập đơn giản dễ dàng.

Sau lúc nhấn OK, Visual Studio IDE sẽ khởi tạo ra một dự án mới với cấu trúc như dưới. Trong thời điểm này, các bạn không bắt buộc quyên tâm đến bọn chúng làm cái gi.


*

Sau khi build test dự án này, tác dụng biên dịch sẽ được xuất ra trong một file có tên là MathDLL.dll nlỗi mặt dưới:


*

Vì mình sẽ đặt ở chính sách build Debug, phải tệp tin thỏng viện này sẽ nằm trong thư mục Debug, và cân xứng cùng với những dự án khác sống trong chính sách build Debug.

*

Sau này, các bạn cũng đề xuất build thêm một phiên bản Release, bạn dạng này đã dùng làm phân păn năn tới các thiết kế viên khác áp dụng nhằm Release sản phẩm của họ.

Tiếp theo, các bạn nhấp chuột yêu cầu vào project hiện giờ, lựa chọn Properties . Các bạn vào Configuration Properties -> C/C++ -> Preprocessor với xem vào phần Preprocessor Definations :


*

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

Xem thêm: Mua Nam Châm Vĩnh Cửu, Nam Châm Viên, Nam Châm Trắng, Nam Châm Vĩnh Cửu

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

Tạo phần header tệp tin đến thỏng viện

Bây tiếng, họ cùng sản xuất một header file chứa phần knhị báo cho những tác dụng trong thỏng viện:


*

Mình đánh tên cho header file này là MathLib.h nhằm khai báo một số trong những hàm tính toán cơ phiên bản. Và dưới đấy là code đến 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ố trang bị hơi new so với các bạn mới học tập lập trình.

ví dụ như, extern “C” có nghĩa là gì? Đây là cách để các hàm viết trong ngôn từ C++ có thể sử dụng được trong những công tác viết trên ngữ điệu C. Các các bạn tham khảo thêm ở đây.

Và quan niệm MATHDLL_API cùng với __declspec(dllexport)__declspec(dllimport) nhằm mục tiêu mục tiêu gì? Các chúng ta còn nhớ ở vị trí bên trên, lúc bọn họ tạo Project nhằm thành lập tlỗi viện liên kết cồn, bọn họ tất cả vào phần Preprocessor Definations để khám nghiệm coi tất cả tồn tại cờ (flag) mang tên là MATHDLL_EXPORTS xuất xắc không phải không?

Cờ MATHDLL_EXPORTS này đang chỉ lâu dài vào Project MathDLL (thương hiệu mình đặt) mình vừa sản xuất, và nó vẫn hi hữu khi bị trùng cùng với phần đông cờ trong những project khác.

Vậy, trong dự án công trình tạo nên thỏng viện link động này, họ đang đánh giá coi nếu như bao gồm sống thọ cờ MATHDLL_EXPORTS , thì đang áp dụng knhì báo __declspec(dllexport) để báo đến compiler hiểu được chúng ta mong mỏi xuất rất nhiều chức năng này ra tệp tin .dll .

Và giữa những project không giống, sẽ không lâu dài cờ MATHDLL_EXPORTS , thì knhị báo __declspec(dllimport) để báo mang đến compiler biết rằng mọi hàm kia sẽ tiến hành cài đặt lên từ tlỗi viện links đụng trong quy trình công tác thực hiện.

Xây dựng phần tư tưởng cho các chức năng vào tlỗi viện

Sau khi chế tạo ra Project MathDLL , bọn họ vẫn thấy tệp tin MathDLL.cpp đã có được thêm vào sẵn. Chúng ta không nhất thiết phải tạo ra thêm file .cpp như thế nào khác. Hoặc nếu như những bạn muốn tạo ra thêm, và đánh tên Theo phong cách chúng ta dễ nắm bắt cũng rất được cả.

Trong file MathDLL.cpp mình tư tưởng các hàm nhỏng 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 cồn trong chương trình của bạnHiện giờ, chúng ta thuộc demo biên dịch lại tlỗi viện một đợt tiếp nhữa.

*

Kết quả biên dịch thành công nghĩa là bạn đã có một tlỗi viện liên kết đụng mang đến riêng mình.

Điều bọn họ cần quyên tâm bây chừ là làm thế nào nhằm sử dụng thỏng viện này vào dự án công trình hoặc chương trình khác.

Mình quay trở về với project mẫu mình đã tạo nên trước đó:


Mình đã clean sạch sẽ, còn chỉ vướng lại một file main.cpp nhằm dùng test thỏng viện mình vừa tạo ra.

Để tiện lợi hơn vào quá trình liên kết thỏng viện, họ cùng sinh sản một thư mục include và thỏng mục lib vào thư mục đựng project hiện hành. Một vài bước tiếp theo sau hơi tương tự cùng với bài toán link thỏng viện link tĩnh.

Thư mục include đang chứa các header files của tlỗi viện. Trong thư viện MathDLL , bọn họ chỉ gồm tạo ra một header tệp tin tuyệt nhất, phải chỉ cần copy tệp tin đó vào trong thư mục include vừa tạo thành của công tác của các bạn:

*

Và tlỗi mục lib đang chứa file thư viện đã biên dịch:

*

Bây giờ đồng hồ, chúng ta vẫn vào phần Properties của dự án công trình nhằm cấu hình liên kết thư viện links rượu cồn.

Các bạn bấm vào bắt buộc vào dự án, chọn Properties -> C/C++ -> General , vào phần Additional Include Directories , các bạn trỏ đến thư mục include chứa header file của tlỗi viện nhưng chúng ta đang copy vào đó:

*

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

*

Cũng vào hành lang cửa số Properties, chúng ta lựa chọn thẻ Linker -> Input , tìm đến cái Additional Dependencies :

*

Trong phần này, các bạn điền vào tên các thỏng viện cần sử dụng vào lịch trình tất nhiên phần đuôi mở rộng nha.

Chạy chương trình

Bây giờ đồng hồ thì áp dụng các tác dụng trong tlỗi viện thôi chúng ta. Trong file main.cpp mình sử dụng đơn giản và dễ dàng nlỗi sau:

#include #include "MathLib.h"​int main(){std::cout Lúc bấy giờ, chúng ta biên dịch, với chạy công tác vẫn chạm chán lỗi nlỗi sau:


Còn một Việc các bạn phải làm cho là copy tệp tin .dll (theo dự án bản thân sử dụng là MathDLL.dll) của thỏng viện vào trong thỏng mục cất tệp tin thực hiện (.exe) của dự án:

*

Như các bạn thấy, thỏng viện liên kết hễ là một trong những phần bóc biệt đối với chương trình triển khai.

Xem thêm: Hoa Hậu Hoàn Vũ 2017 Đi Từ Thiện Mái Ấm Tín Thác Cùng Đôi Dép

Hẹn gặp gỡ lại các bạn trong bài học tiếp theo sau vào khóa đào tạo lập trình sẵn C++ hướng thực hành thực tế.


Chuyên mục: Tổng hợp