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

环境说明

系统:Ubuntu 18.04
python:python 2.7.17

额外环境

上面的环境是普通测试,但是最终标题中的任务我需要在docker中执行,很多块内容我也不太懂,所以一步一步测试

参考链接

1. ubuntu下将c++转换为so文件并利用python调用

正文

所有C++代码均在一个文件中

新建c++代码文件 hello_whole.cpp,内容如下:

#include <iostream>
using namespace std;

extern "C"{                           
   double add(int, int);   
}

double add(int x1, int x2){   
    return x1+x2;
}

int main(){     
  int a = 1;
  int b =2 ;
  int c;
  c = add(a,b);
  return c;
}

因为python的ctype库调用.so可以调用c,但不能调用c++,所以需要加上extern "C"{...},里面放要在python中调用的函数,主函数不用放进去

建好hello_whole.cpp文件后,打开终端,进入该文件所在的文件夹,执行命令:

g++ hello_whole.cpp -fpic -shared -o libhelloWhole.so
ls

可以看到文件夹下多了一个libhelloWhole.so动态库

然后在hello_whole.cpp同文件夹下新建python代码文件 hello.py,内容如下:

from ctypes import *

lib = CDLL("/absolute/path/to/your/so/file/libhelloWhole.so") 
input1 = 100
input2 = 220
result1 = lib.add(input1,input2)
result2 = lib.main()
print (result1,result2)
print '***finish***' 

也可以不用绝对路径,但我的会报错,索性直接上绝对路径了

然后就可以看到hello.py执行hello_whole.cpp中定义的函数输出了

所有C++代码分散在不同文件夹

因为我的项目涉及到很多分散的代码,不可能放在一个c++文件中;那么显然这里涉及到c++编译生成可执行文件的过程
具体实现跳转至下面链接:

「Python」第二节:python调用多个C++文件生成的动态库(.so)Part II

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值