Sử Dụng C Library Trong C++ | CppDeveloper
Có thể bạn quan tâm
Khi lập trình với C++, đôi khi chúng ta cần sử dụng thư viện có sẵn viết bằng C. Các thư viện có sẵn này có thể được phân phối dưới dạng source code (các thư viện open source) hoặc dưới dạng binary bao gồm file thư viện đi kèm với các file header (open source hoặc closed source). Và vấn đề ở đây là nếu cứ để thế mà dùng thì trong source C++ mà call đến hàm ở source C thì sẽ không được (compile sẽ lỗi).
Vì vậy trong bài này mình sẽ hướng dẫn anh em cách để có thể dùng được C library trong C++. Giả sử chúng ta có có file header Sample.h như sau → C++ void doSomething();1 | voiddoSomething(); |
Chúng ta có khai báo của một hàm có tên là doSomething, hàm này được implement trong file Sample.c như sau →
C++ #include "Sample.h" #include <stdio.h> void doSomething() { printf("doSomething"); }1234567 | #include "Sample.h"#include <stdio.h> voiddoSomething(){printf("doSomething");} |
1234567 | #include "Sample.h" intmain(){doSomething();return0;} |
1 | error LNK2019:unresolved external symbol"void __cdecl doSomething(void)"(?doSomething@@YAXXZ)referenced infunction_main |
Nguyên nhân ở đây là ở giai đoạn linking các object với nhau thì compiler đang hiểu hàm doSomething là hàm C++ và tìm kiếm hàm này, mặc dù hàm này có trong file object Sample.o tuy nhiên do Sample.c có đuôi .c nên nó được compiler biên dịch theo C convention. Trong khi đó compiler cứ mải tìm kiếm hàm doSomething theo C++ convention, kết quả là compiler tìm không ra dẫn đến lỗi linking.
Để giải quyết vấn đề này thì chúng ta cần thêm extern “C” vào header file như sau → C++ #ifdef __cplusplus extern "C" { #endif void doSomething(); #ifdef __cplusplus } /* end of "extern C" block */ #endif123456789 | #ifdef __cplusplusextern"C"{#endif voiddoSomething(); #ifdef __cplusplus}/* end of "extern C" block */#endif |
— Phạm Minh Tuấn (Shun) —
- __cplusplus
- C in C++
Xử lý song song (multithreading) với OpenMP trong C++
Tiếp theoKhi nào nên dùng int32_t thay vì int khi lập trình C/C++ ?
Tìm kiếm cho:Facebook Page
Ads
Forum
Bài viết mới
-
Ý nghĩa của Change-Id trong Gerrit Code Review
Tháng Một 27, 2022 0 -
Android Automotive OS – Android based platform dành cho ô tô
Tháng Một 19, 2022 0 -
Dùng song song 2 mạng Ethernet và Wifi trên Windows
Tháng Chín 27, 2021 0 -
Một số cách convert number sang string trong C++
Tháng Năm 7, 2021 0 -
Toán tử ‘typeid’ trong C++
Tháng Ba 8, 2021 0 -
Bộ tiền xử lý – Preprocessor trong C/C++
Tháng Mười Hai 28, 2020 0 -
Cùng tìm hiểu về Base64 encoding
Tháng Mười Một 4, 2020 0
Chuyên mục
- 4 TÍNH CHẤT CỦA OOP
- BEST PRACTICES
- C++ NÂNG CAO
- CODE GYM
- CTDL & GIẢI THUẬT
- DESIGN PATTERNS
- KIẾN THỨC TỔNG HỢP
- LINUX / YOCTO / AOSP
- TECH365
- VISUAL STUDIO
Copyright © 2024 CppDeveloper by Phạm Minh Tuấn (SHUN)
Từ khóa » Thư Viện Include Trong C
-
Khai Báo Thư Viện Và Hàm Main Trong C++ - Freetuts
-
Thư Viện Chuẩn C++ – Wikipedia Tiếng Việt
-
Các Hàm Và Thư Viện Có Sẵn Trong C | Lập Trình Từ Đầu
-
Khai Báo Thư Viện Của C Và C++ Xen Lẫn Có Sao Không?
-
Thư Viện C Chuẩn (C Standard Library)
-
[C/C++] Tạo Thư Viện Trong C – Create A Library In C
-
Thư Viện C Chuẩn (C Standard Library) - Hoclaptrinh
-
4.1. Thư Viện Chuẩn Là Gì - Lập Trình Tân Binh
-
Tổng Hợp Thư Viện Dùng Trong Ngôn Ngữ Lập Trình C - Học 3 Giây
-
Cách Tạo Thư Viện Trong C
-
Cách Tạo Thư Viện Trong C
-
Mục đích Của #include
Dùng để Làm Gì? - Banhoituidap -
Tự Học C/C++ | Giới Thiệu Các Thuật Toán Thư Viện Chuẩn »