文章目录

  • 一 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调用相关推荐

  1. 【DLL】clion生成.dll文件、python调用.dll文件

    最近为了生成以及调用.dll文件,踩了一些雷,记录如下 目录 1.clion中生成.dll 2.clion中测试生成的.dll文件 3.在python中调用.dll文件 [1]导入.dll [2]ct ...

  2. 关于win7下编译pyx文件生成pyd文件供Python调用

    在运行python程序的时候,会发现有些模块不是用Python语言编写的,而是用C/C++编写的,主要是考虑到C/C++编写的模块相对Python脚本语言编写的模块执行速度更快.那么在调用这些由C/C ...

  3. Linux C++与Python混合编程(g++生成链接库与python调用)

    gcc/g++ 链接库的编译与链接 这一篇对动态链接库和静态链接库以及编译结果讲得很清楚,目前看到最好的. Linux下Python与C++混合编程

  4. 「Python」python调用单个C++文件生成的动态库(.so)Part I

    环境说明 系统:Ubuntu 18.04 python:python 2.7.17 额外环境 上面的环境是普通测试,但是最终标题中的任务我需要在docker中执行,很多块内容我也不太懂,所以一步一步测 ...

  5. c++通过pybind11制作模型python接口,生成python调用包

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 我是在ubuntu系统进行实验的,所以和window可能会有区别. python调用C/C++有不少的方法,如boost.python, swig, ...

  6. Ubuntu下使用Python调用乐视三合一摄像头

    Ubuntu下使用Python调用乐视三合一摄像头 前言 配置过程 参考资料 前言 ​ 上一篇文章https://blog.csdn.net/qq_44847636/article/details/1 ...

  7. python生成分析图_Pyflame 生成火焰图分析 Python 程序

    Pyflame 生成火焰图分析 Python 程序 后台回复[入门资料] 送你十本Python电子书 文 | EarlGrey 推荐 | 编程派公众号 微信号:codingpy Pyflame 是 U ...

  8. linux系统上使用Python调用C++生成的.so动态链接库opencv

    从环境配置开始,做一些参考链接,我是根据这些链接调试成功的. 在新服务器172.16.5.143的操作记录,CentOS 生成.so文件:ubuntu下将c++转换为so文件并利用python调用 - ...

  9. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  10. 在Ubuntu 16.04.5 LTS上升级python的pip版本实录

    在ubuntu 16.04.5 LTS上使用Python安装模块时,比较顺手的方法是使用pip命令.这次,我在安装一个模块时,老是提示下面的问题,比较不爽.所以,我就照着提示做了一遍,记录下来,以作备 ...

最新文章

  1. 面向过程(结构化)分析方法与面向对象分析方法的区别
  2. react大数据量渲染_React 中的状态自动保存(KeepAlive)
  3. 元组tuple类型内置方法
  4. http文件服务器和ftp文件服务器,http和ftp文件服务器
  5. hadoop学习笔记(三):hdfs体系结构和读写流程(转)
  6. Goldengate的拆分与合并
  7. 在Grails 2.0中使用Servlet 3.0异步功能
  8. web前后端 http转https
  9. NDK开发之数组操作
  10. 51CTO的企业文化——水文化
  11. php如何输出换行,PHP怎样才能让输出的内容自动换行
  12. 用计算机制作flash动画教案,最新最完整Flash动画制作教案.doc
  13. [Matlab]维纳滤波器设计
  14. 官宣:教父级讲师李明加入尚硅谷
  15. meta http-equiv 是什么
  16. Navicat Premium 数据库开发工具
  17. LT6105电流检测放大器介绍
  18. 解密微信小程序用户敏感数据获取用户信息
  19. java 歌词_网易云歌词爬取(java)
  20. 啊哈添柴挑战Java1016. 反向输出一个三位数

热门文章

  1. Hyper-V上Linux的鼠标驱动
  2. Swing组件集合的事件处理(三)
  3. js基础-11-相等和全等的区别
  4. rsync结合inotify工具实现实时同步传输文件
  5. Linux下Oracle中sqlplus上下键乱码问题
  6. springboot图片上传和显示_Jeewx-Boot 1.1 版本发布,基于SpringBoot的开源微信管家系统...
  7. 力特usb转232驱动程序下载_电脑USB接口、U盘接口不能使用的原因及解决方法
  8. android布局共享,android布局属性详解分享
  9. linux7 vnc 黑屏,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  10. php无限分类排序,重新研究这个问题:php无限分类的子分类如何再排序