--- title: "⚙️ Использование C++ кода в Си" date: 2023-11-06T01:29:12+03:00 draft: false tags: [c, cpp, tutorial, development] --- ## Введение В данном руководстве на паре простых примеров покажу, как использовать в программе на Си код на языке C++. ## Реализация динамическй библиотеки Напишем функцию `void f(int i)` на C++, которая выводит в терминал число. ```cpp // lib.cpp #include extern "C" void f(int); void f(int i) { std::cout << i << std::endl; } ``` Программа на Си, которая вызывает функцию C++ `f()`: ```c // main.c void f(int i); int main(void) { f(13); return 0; } ``` Компиляция ```sh g++ -fpic -shared src/lib.cpp -o libaaa.so gcc src/main.c -L. -laaa -o app # Запуск LD_LIBRARY_PATH=. ./app ``` ## Реализация статической библиотеки Функция на C++, которая выводит в терминал `int`. ```cpp // lib.cpp #include extern "C" { void print_cout(const char *str) { std::cout << str << std::endl; } } ``` Программа на Си, которая вызывает функцию C++: ```c // main.c void print_cout(const char *); int main(void) { print_cout("hello world!"); return 0; } ``` Компиляция ```sh gcc -c src/main.c -o main.o g++ -c src/e.cpp -o aaa.o g++ -o app main.o aaa.o # Запуск ./app ``` ## Полезные ссылки - [How to mix C and C++](https://isocpp.org/wiki/faq/mixing-c-and-cpp) - [Creating a shared and static library with the GNU compiler (gcc)](https://renenyffenegger.ch/notes/development/languages/C-C-plus-plus/GCC/create-libraries/index) - [Using Static C++ Library in C](https://cplusplus.com/forum/general/284264/)