`
daweibalong
  • 浏览: 45586 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Python调用C/C++初步

阅读更多

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

1、编写test.c
  1. #include <stdlib.h>  
  2.   
  3. int foo(int a, int b)  
  4. {  
  5.     printf("Your input %i and %i\n", a, b);  
  6.     return a + b;  
  7. }  
 
2、 gcc编译:gcc -o test.so -shared -fPIC test.c
3、 编写test.py
  1. import ctypes  
  2. ll = ctypes.cdll.LoadLibrary 
  3. lib = ll("./test.so")  
  4. lib.foo(13)  
4、运行
 python test.py
成功运行Python调用C/C++初步

不过在调用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
  1. import ctypes  
  2. ll = ctypes.cdll.LoadLibrary 
  3. lib = ll("./test2.so")  
  4. lib.cfoo2(13)
  5.   
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;
}
 
分享到:
评论

相关推荐

    python调用C/C++ demo

    2. Python调用C++:通过`ctypes`和`extern "C"`封装 由于C++的名称修饰(name mangling),直接使用`ctypes`调用C++函数会遇到问题。解决方法是在C++代码中使用`extern "C"`来声明函数,就像在C语言示例中那样。或者...

    详解python如何调用C/C++底层库与互相传值

    Python调用C/C++库,我现在能做到的有两种方式 1.extern “C” 导出(互相传值比较麻烦,不建议使用这种方式): 将C/C++库做成和平常一样的DLL和或者.so,比如: //.h文件 #include &lt;Python&gt; //.cpp文件 //C/C++ ...

    Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库(DLL)是跨语言编程中常见的技术,它允许Python程序利用C或C++编写的高效代码。本篇将详细解释如何实现这一过程。 首先,我们需要了解C/C++动态链接库。DLL(Dynamic Link Library)是一种...

    基于Python和C_C++的分布式计算架构.pdf

    接着,通过Python调用shell命令编译SWIG接口文件,并将编译好的模块部署到相应节点。 除了SWIG技术,文章还强调了RPYC的作用,即在节点间传递同步。RPYC是基于Remote Procedure Call (RPC)的Python库,通过网络实现...

    分别基于Python和C/C++的特征值和特征向量求解源代码(含运行结果和案例说明)

    本资源提供了基于Python和C/C++两种编程语言的特征值和特征向量求解源代码,便于开发者和学习者进行实践操作。 首先,我们来看Python实现。Python以其简洁易读的语法和丰富的科学计算库而被广泛用于数据分析和算法...

    python加载自己写的c/c++程序

    Python是一种高级编程语言,以其简洁的...以上就是关于如何在Python中调用自定义C/C++程序的知识点,这种混合编程方式可以帮助我们在保持Python的易用性的同时,充分利用C/C++的高性能计算能力,实现复杂算法的优化。

    linux 下 python调用c或者c++编写的代码使用案例

    SWIG是一个工具,它可以自动生成Python和其他语言的接口代码,使得C/C++代码可以被Python调用。你需要编写一个SWIG接口文件,指定哪些C/C++函数或类需要暴露给Python。之后,SWIG会生成Python模块,你可以直接在...

    ubuntu中python调用C/C++方法之动态链接库详解

    在Ubuntu系统中,Python调用C或C++的方法通常是通过动态链接库(Dynamic Link Library,简称DLL)来实现的。动态链接库允许Python程序利用C或C++编写的高效功能,而无需将整个C/C++代码编译进Python解释器。这种技术...

    python调用C与C++语言.pdf

    本文档介绍了如何使用Python调用用C语言或C++编写的动态链接库(DLL),这对于计算机视觉和人工智能领域的开发者尤为有用,因为他们可以使用性能更高的语言编写算法,同时在Python中享受高级特性和丰富的库。...

    C/C++与Python混编的详细文件

    9. **Python调用C/C++代码**:在Python脚本中,使用ctypes导入.so文件,通过`cdll`或`cdll.LoadLibrary`加载库,然后定义函数原型并调用。 10. **性能考虑**:使用C/C++编写的动态库通常比纯Python代码运行得更快,...

    python,c/c++,java,nodejs,php,go 本地代码运行

    这个工具可能包含了编译和运行C/C++代码的功能,通过接口调用相应的编译器(如GCC或Clang)。 4. **Java**: Java是一种跨平台的面向对象的语言,广泛应用于企业级应用开发。该工具可能集成了JDK,允许用户编写、...

    C/C++、matlab、python:生成c动态库,matlab、python调用

    最后,Python调用C动态库主要依赖于`ctypes`库: 1. **导入动态库**:在Python中,使用`ctypes.cdll.LoadLibrary`加载动态库文件。记得根据操作系统选择正确的文件名,例如`ctypes.cdll.LoadLibrary('libmylib.so')...

    Python使用ctypes调用C/C++的方法

    python使用ctypes调用C/C++ 1. ctpes介绍 ctypes is a foreign function library for Python. It provides C compatible data types, and allows calling functions in DLLs or shared libraries. It can be used to...

    Python中调用C++dll例子

    下面我们将详细介绍如何使用`ctypes`来调用C++编写的DLL。 1. 定义C++接口 在C++中,我们需要编写一个DLL,包含一些可供Python调用的函数。比如,我们可以创建一个名为`CreateDll`的DLL,里面有一个函数`...

    Python & C/C++联合编程实战

    一 环境准备 和Python语法快速入门二 Python CTypes访问C/C++动态链接库三 Python源码跨平台的编译四 Python的C/C++扩展库_模块、函数、类扩展五 Python的多线程GIL及在web中调用ffmpeg扩展示例六 Python虚拟机定制-...

    Python嵌入C/C++进行开发详解

    扩展到Python调用C/C++的DLL动态链接库,首先需要创建一个DLL工程,并导出C函数供Python调用。例如: **hello.h** ```cpp #ifdef EXPORT_HELLO_DLL #define HELLO_API __declspec(dllexport) #else #define HELLO_...

    abb robot studio与python/C/Matlab等的接口 open_abb-fuerte-devel.rar

    此压缩包"open_abb-fuerte-devel.rar"可能包含了一个针对ABB Robot Studio的开源开发工具或库,用于扩展其功能,特别是与Python、C/C++和Matlab等编程语言的接口。 接口技术是连接不同系统和应用的关键,它允许数据...

    C/C++ 多线程调用嵌入Python

    配合文章代码实现 c++ 多线程调用嵌入的Python 文章详情 https://blog.csdn.net/u010383605/article/details/82057084 Python下载地址: https://www.python.org/downloads/windows/

Global site tag (gtag.js) - Google Analytics