ubuntu c/c++ 生成.so 并被python调用
文章目录
- 一 c 生成 .so
- 二 c++ 生成 .so
- 2.1 单个c++ 生成 .so
- 2.2 多个 c++ 生成 .so
- 三 python调用.so
一 c 生成 .so
1.编写源文件:
建立一个源文件,名命func.c:
#include<stdio.h>
int func(int a)
{printf("func receive num is %d\n", a);return 0;
}
2.编译生成动态链接库.so:
输入指令:
gcc -g -rdynamic func.c -fPIC -shared -o libfunc.so
3.为该动态库编写接口文件:
为了让用户指导动态库里面有哪些接口可以使用,需要另外编写库里面函数的接口文件,也就是头文件。名命我们的头文件为func.h:
#ifndef FUNC_H
#define FUNC_Hint func(int a);#endif
4.使目标程序链接动态库
现在编写一个目标程序,命名为main.c,该程序需要使用到该动态库中的func()函数:
#include<stdio.h>
#include"func.h"int main()
{int temp = 0;printf("Please input your num:");scanf("%d", &temp);(void)func(temp);return 0;
}
二 c++ 生成 .so
2.1 单个c++ 生成 .so
python 的ctype可以调用C而无法调用c++,加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。
创建 test_b.app
#include <iostream>
using namespace std;
//重要知识点
extern "C"{double add(int, int);double subtract(int, int);
}double add(int x1, int x2)
{return x1+x2;
}
double subtract(int x1, int x2)
{return x1-x2;
}
int main()
{int a = 4;int b =2 ;int c;c = add(a,b);return c;int d;d = add(a,b);return d;
}
编译成 .so。 注意so文件的名称必须以lib开头。
g++ test_b.app -fpic -shared -o libtest.so
2.2 多个 c++ 生成 .so
创建 test_b1.app,test_b2.app,test_b3.app,test_b4.app
编译成 .so。 注意so文件的名称必须以lib开头。
g++ test_b1.app test_b2.app test_b3.app test_b4.app -fpic -shared -o libtest.so
三 python调用.so
import ctypes
ll = ctypes.cdll.LoadLibrary lib = ll("./libtest.so")
input1 = 100
input2 = 220
result1 = lib.add(input1,input2)
result2 = lib.main()
print(result1,result2)
ubuntu c/c++ 生成.so 并被python调用相关推荐
- 【DLL】clion生成.dll文件、python调用.dll文件
最近为了生成以及调用.dll文件,踩了一些雷,记录如下 目录 1.clion中生成.dll 2.clion中测试生成的.dll文件 3.在python中调用.dll文件 [1]导入.dll [2]ct ...
- 关于win7下编译pyx文件生成pyd文件供Python调用
在运行python程序的时候,会发现有些模块不是用Python语言编写的,而是用C/C++编写的,主要是考虑到C/C++编写的模块相对Python脚本语言编写的模块执行速度更快.那么在调用这些由C/C ...
- Linux C++与Python混合编程(g++生成链接库与python调用)
gcc/g++ 链接库的编译与链接 这一篇对动态链接库和静态链接库以及编译结果讲得很清楚,目前看到最好的. Linux下Python与C++混合编程
- 「Python」python调用单个C++文件生成的动态库(.so)Part I
环境说明 系统:Ubuntu 18.04 python:python 2.7.17 额外环境 上面的环境是普通测试,但是最终标题中的任务我需要在docker中执行,很多块内容我也不太懂,所以一步一步测 ...
- c++通过pybind11制作模型python接口,生成python调用包
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 我是在ubuntu系统进行实验的,所以和window可能会有区别. python调用C/C++有不少的方法,如boost.python, swig, ...
- Ubuntu下使用Python调用乐视三合一摄像头
Ubuntu下使用Python调用乐视三合一摄像头 前言 配置过程 参考资料 前言 上一篇文章https://blog.csdn.net/qq_44847636/article/details/1 ...
- python生成分析图_Pyflame 生成火焰图分析 Python 程序
Pyflame 生成火焰图分析 Python 程序 后台回复[入门资料] 送你十本Python电子书 文 | EarlGrey 推荐 | 编程派公众号 微信号:codingpy Pyflame 是 U ...
- linux系统上使用Python调用C++生成的.so动态链接库opencv
从环境配置开始,做一些参考链接,我是根据这些链接调试成功的. 在新服务器172.16.5.143的操作记录,CentOS 生成.so文件:ubuntu下将c++转换为so文件并利用python调用 - ...
- 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操
在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...
- 在Ubuntu 16.04.5 LTS上升级python的pip版本实录
在ubuntu 16.04.5 LTS上使用Python安装模块时,比较顺手的方法是使用pip命令.这次,我在安装一个模块时,老是提示下面的问题,比较不爽.所以,我就照着提示做了一遍,记录下来,以作备 ...
最新文章
- 面向过程(结构化)分析方法与面向对象分析方法的区别
- react大数据量渲染_React 中的状态自动保存(KeepAlive)
- 元组tuple类型内置方法
- http文件服务器和ftp文件服务器,http和ftp文件服务器
- hadoop学习笔记(三):hdfs体系结构和读写流程(转)
- Goldengate的拆分与合并
- 在Grails 2.0中使用Servlet 3.0异步功能
- web前后端 http转https
- NDK开发之数组操作
- 51CTO的企业文化——水文化
- php如何输出换行,PHP怎样才能让输出的内容自动换行
- 用计算机制作flash动画教案,最新最完整Flash动画制作教案.doc
- [Matlab]维纳滤波器设计
- 官宣:教父级讲师李明加入尚硅谷
- meta http-equiv 是什么
- Navicat Premium 数据库开发工具
- LT6105电流检测放大器介绍
- 解密微信小程序用户敏感数据获取用户信息
- java 歌词_网易云歌词爬取(java)
- 啊哈添柴挑战Java1016. 反向输出一个三位数
热门文章
- Hyper-V上Linux的鼠标驱动
- Swing组件集合的事件处理(三)
- js基础-11-相等和全等的区别
- rsync结合inotify工具实现实时同步传输文件
- Linux下Oracle中sqlplus上下键乱码问题
- springboot图片上传和显示_Jeewx-Boot 1.1 版本发布,基于SpringBoot的开源微信管家系统...
- 力特usb转232驱动程序下载_电脑USB接口、U盘接口不能使用的原因及解决方法
- android布局共享,android布局属性详解分享
- linux7 vnc 黑屏,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- php无限分类排序,重新研究这个问题:php无限分类的子分类如何再排序