python 调用 CC++ 编程

    xiaoxiao2021-03-25  101

    ~~~~~~~~~~~P1~~~~~~~~~~~~~ 首先,先用C写一个简单的函数 Show.c #include<stdio.h>void ShowString(){ printf("Hello World.\n")}

    这个函数是一个最简单的HelloWorld函数,几乎所有编程语言教材都会以她作为第一个例子(跑题了。。。) 我们需要做的是在一个python脚本中调用这个函数 Show.py #!/usr/bin/env pythonimport ctypesDLLs = ctypes.cdll.LoadLibraryLibs = DLLs("./Show.so")Libs.ShowString()

    首先我们编译Show.c文件 gcc -shared -fPIC Show.c -o Show.so 这样得到一个 .so的文件,注意这个文件的文件名必须和Show.py里调用名字一样。。。 然后在执行python脚本,整个过程如下 jd@jd-desktop:~/163/p1$ gcc -shared -fPIC Show.c -o Show.so jd@jd-desktop:~/163/p1$ ls -l 总用量 20 -rw-rw-r-- 1 jd jd   84 10月  4 16:55 info.txt -rw-rw-r-- 1 jd jd  66 10月  4 16:56 Show.c -rw-rw-r-- 1 jd jd  110 10月  4 16:59 Show.py -rwxrwxr-x 1 jd jd 8009 10月  4 17:03 Show.so jd@jd-desktop:~/163/p1$ python Show.py Hello World. jd@jd-desktop:~/163/p1$ ~~~~~~~~~~~p2~~~~~~~~~~~`我们可以尝试下稍微复杂的函数 Add.c文件

    #include<stdio.h>int ADD(int X , int Y){ return X+Y;}

    Add.py文件

    #!/usr/bin/env pythonimport ctypesDLLs = ctypes.cdll.LoadLibraryLibs = DLLs("./Adds.so")print Libs.ADD(5,4)

    Add.c文件是一个简单的加法函数,参数为两个int,函数返回这个个参数之和 和第一部分差不多,首先编译 Add.py文件,然后执行python脚本 jd@jd-desktop:~/163/p1/2$ gcc -shared -fPIC Add.c -o Adds.so jd@jd-desktop:~/163/p1/2$ ls -l 总用量 16 -rw-rw-r-- 1 jd jd   59 10月  4 17:13 Add.c -rw-rw-r-- 1 jd jd  106 10月  4 17:13 Add.py -rwxrwxr-x 1 jd jd 7853 10月  4 17:14 Adds.so jd@jd-desktop:~/163/p1/2$ python Add.py 9 jd@jd-desktop:~/163/p1/2$ ~~~~~~~~p3~~~~~~~~ 看样子似乎不错,那么我们继续吧 CountArray.c

    #include<stdio.h>void CountArray(int* pt int Len){ SUMs = 0 for(int i = 0 ; i < Len ; ++i) SUMs += *(pt+i) printf("SUM Is %d.",SUMs)}

    这是一个很普通的求数组和的函数,传入一个int数组的首个元素地址和数组长度,然后球这个数组所有元素的和 于是,按照上面2个部分,我们自然想到了写一个 CountArray.py然后编译C的文件,运行python脚本 CountArray.py

    #!/usr/bin/env pythonimport ctypesDLLs = ctypes.cdll.LoadLibraryLibs = DLLs("./CountArray.so")Libs.CountArray(/*手动滑稽*/,10)

      请允许我使用这样一个表情。。 我想你也看到问题了,对于python来说,他的类型和C有很大不同,如果一个C函数不需要参数,或者参数是python里存在的类型,那在python里直接调用一切OK,但当这个类型python中不存在的时候,你就会发现无法给调用的(C/C++)函数一个合适的参数 对于函数返回值也有同样的问题。。。
    转载请注明原文地址: https://ju.6miu.com/read-15172.html

    最新回复(0)