python 调用c++动态库

python 调用c++动态库

python 调用c++动态库

概述

在实际的软件开发过程中,我们经常会有需要使用到 C++ 编写的动态库的情况。而 Python 作为一门简洁、高效的脚本语言,也经常需要调用 C++ 动态库来实现更底层的功能。本文将介绍如何使用 Python 调用 C++ 动态库,并展示一些示例代码和运行结果。

准备工作

在开始之前,我们需要确保系统中已经安装了以下软件:

  • Python 3.x
  • C++ 编译器(比如 g++)
  • CMake(用于生成动态库文件)

创建 C++ 动态库

首先,我们需要编写一个简单的 C++ 程序,并将其编译成动态库。下面是一个简单的示例代码 hello.cpp

#include <iostream>

extern "C" {
    void say_hello() {
        std::cout << "Hello from C++ dynamic library!" << std::endl;
    }
}

接着,我们可以使用 CMake 来生成动态库文件。创建一个 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.5)
project(hello)

set(CMAKE_CXX_STANDARD 11)

add_library(hello SHARED hello.cpp)

然后执行以下命令来生成动态库文件:

mkdir build
cd build
cmake ..
make

编译完成后,会在 build 目录下生成 libhello.so 文件,这就是我们的 C++ 动态库文件。

使用 Python 调用动态库

接下来,我们将使用 Python 来调用刚刚生成的 C++ 动态库文件。首先,我们需要创建一个 Python 脚本 test.py

import ctypes

# Load the dynamic library
lib = ctypes.CDLL('./build/libhello.so')

# Call the C++ function
lib.say_hello()

在该 Python 脚本中,我们使用 ctypes 模块加载了刚刚生成的动态库文件,并通过 lib.say_hello() 来调用 C++ 动态库中的 say_hello() 函数。

现在,我们可以运行该 Python 脚本来测试我们的调用情况:

python test.py

运行结果将会输出:

Hello from C++ dynamic library!

传递参数和返回值

除了简单的函数调用之外,我们还可以在 Python 脚本中传递参数给 C++ 动态库,并接收返回值。下面我们来实现一个简单的加法函数。首先,修改 C++ 程序 hello.cpp

#include <iostream>

extern "C" {
    int add(int a, int b) {
        return a + b;
    }
}

然后修改 Python 脚本 test.py

import ctypes

# Load the dynamic library
lib = ctypes.CDLL('./build/libhello.so')

# Define the types of the function
lib.add.restype = ctypes.c_int
lib.add.argtypes = [ctypes.c_int, ctypes.c_int]

# Call the C++ function
result = lib.add(3, 5)
print("The result of adding 3 and 5 is:", result)

通过 lib.add.restypelib.add.argtypes 分别定义了函数的返回值类型和参数类型。运行 Python 脚本后,将会输出:

The result of adding 3 and 5 is: 8

结语

本文介绍了如何使用 Python 调用 C++ 动态库,并展示了一些示例代码和运行结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程