设为首页 收藏本站
查看: 1648|回复: 0

[经验分享] Python调用C/C++初步

[复制链接]

尚未签到

发表于 2017-4-24 09:06:44 | 显示全部楼层 |阅读模式
  
测试库要求做到全部自动化--动态添加新的计算图像指标可以直接不用重写底层java程序……这段时间在学Python,由于Python的ctypes可以试python轻松调用动态链接库,从而调用c/c++程序,于是想到可以在添加指标的时候有管理员再上传相关方法的dll或so文件,由Python进行调用新的指标计算方法进行重新计算。不知效果如何,先测试简单的调用:



1、编写test.c


  • #include <stdlib.h>  
  •   
  • int foo(int a, int b)  
  • {  
  •     printf("Your input %i and %i\n", a, b);  
  •     return a + b;  
  • }[size=1em]  

 



2、 gcc编译:gcc -o test.so -shared -fPIC test.c

3、 编写test.py


  • import ctypes  
  • ll = ctypes.cdll.LoadLibrary 
  • lib = ll("./test.so")  
  • lib.foo(13)  

4、运行

 python test.py

成功运行 DSC0000.gif




不过在调用c++文件的时候会发生错误,具体原因不详,但依然可以调用!!!:

1、编写c++文件test2.cpp

#include<iostream>
using namespace std;
void foo2(int a,int b)
{
cout<<a<<" "<<b<<endl;
}
 

//以下为必须

extern "c"
{
void cfoo2(int a,int b)
{
foo2(a,b);
}
}
 

2、编译c++文件:

   g++ -o test2.so -shared -fPIC test2.c

3、 编写test2.py


  • import ctypes  
  • ll = ctypes.cdll.LoadLibrary 
  • lib = ll("./test2.so")  
  • lib.cfoo2(13)
  • [size=1em]  


4、运行:


python test2.py

成功!




问题补充:

1、在windows下调用dll,如果过python是64位,那么在写dll时编译要用x64,要不然会出现错误的win32提示。

2、在h文件中:

extern "C" int __declspec(dllexport)add(int x,int y);
 

cpp:

int __declspec(dllexport)add(int x,int y)
{
cout<<x<<" "<<y<<endl;
return x+y;
}
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-368426-1-1.html 上篇帖子: python安装MySQLdb误区 下篇帖子: Python如何输出环境变量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表