Python调用C++/C

cpp 复制代码
#include<iostream>
extern "C" {
	int foo(int a, int b) {
		std::cout << "a + b = " << a + b << std::endl;
		return a + b;
	}
}

如果是编译C++代码,需要写上 extern "c"

生成动态文件:g++-shared -o test.so -fPIC test.cpp (c代码用gcc编译)

如果有opencv,需要链接opencv的库

g++ -shared -o mylib.so -fPIC -I/usr/local/include/opencv4 -L/usr/local/lib test.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui

生成可执行文件

g++ main.cpp -o output_executable -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgcodecs

使用python调用

python 复制代码
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("test.so")
lib.foo(1,3)
print("***********************")
cpp 复制代码
// C++ 代码
#include <opencv2/opencv.hpp>
extern "C" uchar* get_random_mat_data() {
    cv::Mat mat = cv::Mat::zeros(10, 10, CV_8UC1);
    cv::randu(mat, cv::Scalar(0), cv::Scalar(255));  // 填充矩阵

    return mat.data;
}
python 复制代码
import ctypes
import numpy as np

# 加载 C 动态链接库
lib = ctypes.CDLL('mylib.so')
# 定义函数签名,表示返回值为 uchar* 类型
get_mat_data_func = lib.get_random_mat_data
get_mat_data_func.restype = ctypes.POINTER(ctypes.c_ubyte)
# 调用函数获取数据指针
mat_ptr = get_mat_data_func()
# 使用 NumPy 创建数组
mat = np.ctypeslib.as_array(mat_ptr, shape=(10, 10))
print(mat)
相关推荐
念念010737 分钟前
数学建模竞赛中评价类相关模型
python·数学建模·因子分析·topsis
云天徽上1 小时前
【数据可视化-94】2025 亚洲杯总决赛数据可视化分析:澳大利亚队 vs 中国队
python·信息可视化·数据挖掘·数据分析·数据可视化·pyecharts
☺����1 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
zylyehuo1 小时前
C++基础编程
c++
王者鳜錸2 小时前
PYTHON让繁琐的工作自动化-函数
开发语言·python·自动化
tt5555555555553 小时前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
xiao助阵3 小时前
python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
开发语言·python
lg_cool_3 小时前
Qt 中最经典、最常用的多线程通信场景
c++·qt6.3
科大饭桶3 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
tt5555555555553 小时前
字符串与算法题详解:最长回文子串、IP 地址转换、字符串排序、蛇形矩阵与字符串加密
c++·算法·矩阵