C++ Interoperability with Other Languages

C++ is a powerful, versatile programming language that provides extensive support for object-oriented, procedural, and generic programming. However, there may be times when you need to use other languages in your C++ projects, for reasons such as leveraging existing code or using specialized libraries. In this article, we will discuss how C++ can interoperate with other programming languages, including C, Python, and Java.
C++ and C Interoperability
Section titled “C++ and C Interoperability”C++ is an extension of the C language, which means that the two languages share a common foundation. This allows for a natural level of interoperability between C and C++. There are a few key points to remember when working with C and C++ together:
- C functions and variables in C++: C functions and variables can be used directly in C++ code, making it easy to use existing C libraries in your C++ projects. To do this, you need to use the
extern "C"linkage specification in your C++ code. This tells the C++ compiler to treat the specified functions and variables as C symbols.
// In your C++ fileextern "C" { #include "my_c_library.h"}- C++ functions and variables in C: C++ functions and variables can also be used in C code, but it requires more work. You need to use
extern "C"in your C++ code to specify which functions and variables should be treated as C symbols. Then, you can include the corresponding C++ header files in your C code.
// In your C++ header file#ifdef __cplusplusextern "C" {#endif
void my_cpp_function();
#ifdef __cplusplus}#endif- Using C++ objects in C: Using C++ objects (classes, structs) in C code is not straightforward, as C does not support classes and other object-oriented features. To work around this, you can use opaque pointers and create a C API for your C++ objects.
C++ and Python Interoperability
Section titled “C++ and Python Interoperability”Python is a popular scripting language, and there are a few ways to use Python code in C++ projects or vice versa.
- ctypes: This is a Python library that provides a simple way to call C and C++ functions from Python. You can create a shared library (
.soor.dll) from your C++ code and usectypesto load it in Python.
from ctypes import cdll
lib = cdll.LoadLibrary('my_cpp_library.so')result = lib.my_cpp_function()- Boost.Python: This is a C++ library that provides a seamless interface between C++ and Python code. It allows you to expose your C++ functions, classes, and objects to Python, making it easy to use your C++ code from Python scripts.
// In your C++ file, using Boost.Python#include <boost/python.hpp>
int my_cpp_function(int x) { return x * 2;}
BOOST_PYTHON_MODULE(my_cpp_module) { boost::python::def("my_cpp_function", my_cpp_function);}## In your Python scriptimport my_cpp_module
result = my_cpp_module.my_cpp_function(42)- Pybind11: This is another C++ library that provides a simple and efficient way to expose C++ code to Python. Similar to Boost.Python, Pybind11 allows you to create Python bindings for your C++ functions, classes, and objects.
// In your C++ file, using Pybind11#include <pybind11/pybind11.h>
int my_cpp_function(int x) { return x * 2;}
PYBIND11_MODULE(my_cpp_module, m) { m.def("my_cpp_function", &my_cpp_function);}## In your Python scriptimport my_cpp_module
result = my_cpp_module.my_cpp_function(42)C++ and Java Interoperability
Section titled “C++ and Java Interoperability”Java is a widely-used object-oriented programming language, and there are a few ways to use Java code in C++ projects or vice versa.
- JNI (Java Native Interface): JNI is a standard programming interface provided by the Java Virtual Machine (JVM) to allow Java code to call native code written in languages like C or C++. JNI enables you to write native methods in C++ that can be called from Java, allowing you to use C++ code in your Java projects.
// In your Java classpublic class MyClass { public native int my_cpp_function(int x);
static { System.loadLibrary("my_cpp_library"); }}// In your C++ file#include <jni.h>#include "MyClass.h"
JNIEXPORT jint JNICALL Java_MyClass_my_1cpp_1function(JNIEnv *env, jobject obj, jint x) { return x * 2;}- JNA (Java Native Access): JNA is a Java library that provides a simpler alternative to JNI for calling native code from Java. JNA uses dynamic function invocation to call C and C++ functions in shared libraries (
.soor.dll) without writing any native code.
// In your Java class, using JNAimport com.sun.jna.Library;import com.sun.jna.Native;
public interface MyCppLibrary extends Library { MyCppLibrary INSTANCE = (MyCppLibrary) Native.load("my_cpp_library", MyCppLibrary.class);
int my_cpp_function(int x);}
public class MyClass { public static void main(String[] args) { int result = MyCppLibrary.INSTANCE.my_cpp_function(42); System.out.println("Result: " + result); }}- SWIG (Simplified Wrapper and Interface Generator): SWIG is a software development tool that simplifies the task of interfacing different languages. It can generate the necessary JNI code and Java class files needed to interface with C++ code.
// In your C++ header fileint my_cpp_function(int x);// In your SWIG interface file (*.i)%module my_cpp_module
%{ #include "my_cpp_header.h"%}
%include "my_cpp_header.h"After running SWIG to generate the JNI code and Java class files, you can use the generated Java classes in your Java project:
// In your Java classpublic class MyClass { public static void main(String[] args) { System.loadLibrary("my_cpp_module");
int result = my_cpp_module.my_cpp_function(42); System.out.println("Result: " + result); }}In conclusion, C++ provides multiple ways to interoperate with other programming languages, including C, Python, and Java. This enables you to use existing libraries and code written in different languages in your C++ projects or expose your C++ code to be used in projects written in other languages. The choice of the specific method depends on your project requirements, performance needs, and personal preferences.
© 2026 David Li · Home · Blog · RSS ·Classic site · Built with Astro, Starlight and three.js