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)
相关推荐
love530love10 分钟前
彻底解决 ComfyUI Mixlab 插件 Whisper.available False 的报错
人工智能·windows·python·whisper·win_comfyui
不解风水26 分钟前
《深度学习入门:基于 Python 的理论与实现》(斋藤康毅)
人工智能·python·深度学习
偷星星的贼1132 分钟前
数据分析与科学计算
jvm·数据库·python
Blossom.1181 小时前
AI Agent智能办公助手:从ChatGPT到真正“干活“的系统
人工智能·分布式·python·深度学习·神经网络·chatgpt·迁移学习
应用市场1 小时前
Adam优化器深度解析:从数学原理到PyTorch源码实
人工智能·pytorch·python
a努力。1 小时前
2026 AI 编程终极套装:Claude Code + Codex + Gemini CLI + Antigravity,四位一体实战指南!
java·开发语言·人工智能·分布式·python·面试
梦茹^_^1 小时前
flask框架(笔记一次性写完)
redis·python·flask·cookie·session
oioihoii1 小时前
回归测试:软件演进中的质量守护神与实践全指南
c++
二川bro1 小时前
Java集合类框架的基本接口有哪些?
java·开发语言·python
抠头专注python环境配置1 小时前
解决“No module named ‘tensorflow‘”报错:从导入失败到环境配置成功
人工智能·windows·python·tensorflow·neo4j