The following set of code present a fully functioning example of using a simple C library as part of a CPP based project to print on screen.
[download id=”2434″]
The trick relies on encapsulating the C header definitions in the extern "C" declaration. extern "C" will make all function and variable names in C++ have C linkage. What this means at the compiler level is that the compiler will not modify the names so that the C code can link to them and use them using a C compatible header file containing just the declarations of your functions and variables.
[download id=”2434″]
main.c
1 2 3 4 5 6 7 8 9 10 11 | #include "cpp_library.h"#include "c_library.h"extern "C" void c_hello_world();int main() { cpp_hello_world(); c_hello_world(); return 0;} |
cpp_library.h
1 2 3 4 5 6 | #ifndef CPP_BASE_CPP_LIBRARY_H#define CPP_BASE_CPP_LIBRARY_Hvoid cpp_hello_world();#endif //CPP_BASE_CPP_LIBRARY_H |
cpp_library.cpp
1 2 3 4 5 6 7 | #include <iostream>#include "cpp_library.h"void cpp_hello_world() { std::cout << "Hello, World!" << std::endl;} |
c_library.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #ifndef CPP_BASE_C_LIBRARY_H#define CPP_BASE_C_LIBRARY_H#ifdef __cplusplusextern "C" {#endifvoid c_hello_world();#ifdef __cplusplus}#endif#endif //CPP_BASE_C_LIBRARY_H |
c_library.c
1 2 3 4 5 6 7 | #include <stdio.h>#include "c_library.h"void c_hello_world() { printf("Hello, World!\n");} |
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(CPP_Base)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp cpp_library.cpp cpp_library.h c_library.c c_library.h)
add_executable(CPP_Base ${SOURCE_FILES})
[download id=”2434″]
This post is also available in: Greek


