python 调用 C/C++ 编程
来源:互联网 发布:酒神淘宝店地址 编辑:程序博客网 时间:2024/06/06 09:14
~~~~~~~~~~~P1~~~~~~~~~~~~~
首先,先用C写一个简单的函数
Show.c
#include<stdio.h>这个函数是一个最简单的HelloWorld函数,几乎所有编程语言教材都会以她作为第一个例子(跑题了。。。)
void ShowString()
{
printf("Hello World.\n")
}
我们需要做的是在一个python脚本中调用这个函数
Show.py
#!/usr/bin/env python首先我们编译Show.c文件
import ctypes
DLLs = ctypes.cdll.LoadLibrary
Libs = DLLs("./Show.so")
Libs.ShowString()
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文件
Add.py文件#include<stdio.h>
int ADD(int X , int Y)
{
return X+Y;
}
Add.c文件是一个简单的加法函数,参数为两个int,函数返回这个个参数之和#!/usr/bin/env python
import ctypes
DLLs = ctypes.cdll.LoadLibrary
Libs = DLLs("./Adds.so")
print Libs.ADD(5,4)
和第一部分差不多,首先编译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
这是一个很普通的求数组和的函数,传入一个int数组的首个元素地址和数组长度,然后球这个数组所有元素的和#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)
}
于是,按照上面2个部分,我们自然想到了写一个CountArray.py然后编译C的文件,运行python脚本
CountArray.py
#!/usr/bin/env python
import ctypes
DLLs = ctypes.cdll.LoadLibrary
Libs = DLLs("./CountArray.so")
Libs.CountArray(/*手动滑稽*/,10)
我想你也看到问题了,对于python来说,他的类型和C有很大不同,如果一个C函数不需要参数,或者参数是python里存在的类型,那在python里直接调用一切OK,但当这个类型python中不存在的时候,你就会发现无法给调用的(C/C++)函数一个合适的参数
对于函数返回值也有同样的问题。。。
0 0
- python 调用 C/C++ 编程
- 【编程语言】C中调用Python脚本
- BCB(C++)调用Python
- C中调用PYTHON
- C调用python
- C调用python
- Python 调用 C函数
- python调用c
- Python 调用C
- c中调用python
- Python调用c/c++
- c 调用python
- python 调用 c 函数
- python调用C函数库
- Python调用C
- Python调用C/C++
- Python调用C程序
- python调用c/c++
- Python 核心编程 第八章 练习题
- python 核心编程 第十章
- python 核心编程 第十一章
- Leetcode 494. Target Sum Add to List
- python 核心编程 第九章
- python 调用 C/C++ 编程
- C Primer Plus 第十一章 编程练习 1-15题
- C Primer Plus 第十二章 编程练习 1-8题
- C Primer Plus 第十四章 编程练习 1-11题
- C Primer Plus 第十六章 编程练习 1-7题
- C++类成员变量是为什么选择private?
- maven项目管理
- Essential Qt 第一章 Hello Qt
- 冒泡排序实现及优化(Java)