Python 怎樣在python中呼叫C語言

2021-10-08 21:48:58 字數 1526 閱讀 6636

1.寫c語言函式c.c

#include int add_int(int a,int b)

float add_float(float a,float b)

2.編譯為so檔案

windows下用gcc將c檔案編譯成so檔案

gcc --shared -fpic -o c.so c.c
linux下用gcc將c檔案編譯成so檔案

首先,編譯c.c:

gcc -c -fpic -o c.o c.c
其次,生成共享庫:

gcc -shared -o mylib.so mylib.o
mac下…沒mac…

3.在python下呼叫

from ctypes import *

import os

import time

#載入編譯好的so檔案

#這裡要找對so檔案的路徑

adder = cdll(".\c.so")

#呼叫c檔案的函式adder.add_int(),實現int型別資料相加

result_int = adder.add_int(1,2)

print ("sum of 1 and 2 = " + str(result_int))

#----方法2----

#在python中定義c語言能識別的資料型別,這裡強制轉換為c語言的float型別

a = c_float(5.5)

print(a)

b = c_float(4.1)

print(b)

#定義函式並且呼叫,實現相加

add_float = adder.add_float

add_float.restype = c_float

print("sum of 5.5 and 4.1 = ", str(add_float(a, b)))

執行python就發現已經成功呼叫

4.出現的問題

但是經常會出現以下問題

traceback (most recent call last):

file "p.py", line 7, in adder = cdll(".\c.so")

file "d:\sofeware\python3.70\lib\ctypes\__init__.py", line 356, in __init__

self._handle = _dlopen(self._name, mode)

oserror: [winerror 193] %1 不是有效的 win32 應用程式。

為什麼會出現這種問題呢?就是你的gcc與你的python位數不匹配(比如64位的python配32位的gcc),那我們一般會去選擇該python的位數,原因呢就是好改,anaconda直接提供了python的版本管理,我的另一篇文章內就詳細的介紹了怎麼管理python的版本(

只要版本對位這個問題一般來說就不存在了

python怎樣編寫 PYTHON怎樣編寫自動化

1級2018 09 18 回答 就直接寫指令碼,給你舉給例子 編寫工具 1.設計目標 首先說一下我要工具的功能 遍歷某個目錄下包括其下子目錄中所有指定的字尾檔案,然後為這些檔案的頭部插入指定的字串。2.使用場景 設計這樣的工具起因是我最近在將之前 csdn 中的部落格搬運到自己的 hexo 部落格空...

怎樣啟動python 怎樣啟動python程式執行

執行python 程式的三種方式直譯器 python python3 互動式 ipython 整合開發環境 pycharm 直譯器 python python3 python 的直譯器 使用 python 2.x 直譯器 python py 使用 python 3.x 直譯器 python3 py ...

怎樣在wincvs中使用python指令碼

軟體環境 wincvs 1.3.6 1beta6 python ativepython2.3.3 簡要描述 最新版wincvs2.0已經支援python2.4了,而wincvs1.3.6 只支援到python2.2。可是在這兩個主要版本中都有乙個bug 我個人認為的 就是在輸出視窗中進行指令碼模式切...