python 呼叫 C C 程式設計

2021-07-28 04:22:20 字數 2422 閱讀 6133

~~~~~~~~~~~p1~~~~~~~~~~~~~

首先,先用c寫乙個簡單的函式

show.c

#include

void showstring()

這個函式是乙個最簡單的helloworld函式,幾乎所有程式語言教材都會以她作為第乙個例子(跑題了。。。)

我們需要做的是在乙個python指令碼中呼叫這個函式

show.py

#!/usr/bin/env python

import ctypes

dlls = ctypes.cdll.loadlibrary

libs = 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

int add(int x , int y)

add.py檔案

#!/usr/bin/env python

import ctypes

dlls = ctypes.cdll.loadlibrary

libs = 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

void countarray(int* pt int len)

這是乙個很普通的求陣列和的函式,傳入乙個int陣列的首個元素位址和陣列長度,然後球這個陣列所有元素的和

於是,按照上面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++)函式乙個合適的引數

對於函式返回值也有同樣的問題。。。

python 呼叫 C C 詳解

接下來將簡單介紹python如何呼叫c和c 包括呼叫整型,陣列等情況。c函式返回整型int c test.c include include int func int a,int b 編譯成so包 gcc o testpycll 64.so shared fpic test.cpython impo...

Python呼叫c c 函式(1)

python開發效率高,執行效率低。而c c 恰恰相反。因此在python指令碼中呼叫c c 的庫,對python進行擴充套件,是很有必要的。使用python api,需要安裝python dev。test.cpp檔案如下 include 6 python.h 包含python的標頭檔案 1 c c...

C C 呼叫python(新手必看)

目錄 1.背景介紹與程式設計環境 2.完整例項演示 3.問題集錦 4.總結 5.參考鏈結 背景介紹 近年來,python語言憑藉著自身語言的簡單易學 相對於其他程式語言來說 及其功能強大的函式庫 還有其他優點 受到許多程式設計愛好者的青睞,同時十分廣泛的用於人工智慧演算法程式設計中。c c 語言是基...