python 3 호출 c 언어 코드 의 전 과정 기록

3722 단어 python3호출c 언어
개발 환경
 linux: python3.5.2 + ubuntu-gnome-16.04-desktop-amd64
 windows:cygwin + powershell + python3.6
풀 언어 python 은 왜 c 코드 를 호출 합 니까?
 c.python 과 비교 하면 python 은'대량 연산'작업 을 잘 하지 못 합 니 다.python 프로그램의 장점 은 간단 하고'IO 밀집 형 작업'(예 를 들 어 파일 을 열 고 그림 을 다운로드 하 며 스 크 립 트 를 실행 하 는 것)에 적합 합 니 다.python 은 유명한'풀 언어'로 서'밀집 형 작업 계산'을 신속하게 실현 하 는 방법 은 바로'c 의 코드 를 가 져 와 서 직접 사용 하 는 것'이다.
 Python 의 ctypes 모듈 은 Python 호출 C 방법 중 가장 간단 한 것 일 수 있 습 니 다.ctypes 모듈 은 C 언어 와 호 환 되 는 데이터 형식 과 함 수 를 제공 하여 dll 파일 을 불 러 옵 니 다.따라서 호출 할 때 원본 파일 을 수정 하지 않 아 도 됩 니 다.바로 이러한 방법의 단순 성 을 다 졌 습 니 다.
 linux
 1.C 언어 프로그램 을 준비 하여 add.c 로 저장

#include <stdio.h>
 
int add_int(int, int);
float add_float(float, float);
 
int add_int(int num1, int num2)
{
    return num1 + num2;
}
 
float add_float(float num1, float num2)
{
    return num1 + num2;
}
 2.so 라 이브 러 리 로 컴 파일
 Ubuntu 에서 실행:gcc-shared-wl,-soname,adder-o adder.so-fpIC add.c
 3.python 코드 를 준비 하여 python-c.py 로 저장 합 니 다.

import ctypes
 
#load the shared object file
adder = ctypes.cdll.LoadLibrary('./adder.so')
 
#Find sum of integers
res_int = adder.add_int(4,5)
print("4 + 5 = " + str(res_int))
 
#Find sum of floats
a = ctypes.c_float(5.5)
b = ctypes.c_float(4.1)
 
add_float = adder.add_float
add_float.restype = ctypes.c_float
 
print("5.5 + 4.1 = " + str(add_float(a, b)))
 4.테스트
 실행:python 3 python-c.py
 결 과 는 다음 과 같다.
 4 + 5 = 9
 5.5 + 4.1 = 9.600000381469727
 5.설명
 Python 파일 에서 처음에는 ctypes 모듈 을 가 져 온 다음 cdll.LoadLibrary 를 사용 합 니 다.
 함수 가 우리 가 만 든 라 이브 러 리 파일 을 불 러 옵 니 다.이렇게 하면 우 리 는 변수 adder 를 통 해 C 라 이브 러 리 의 함 수 를 사용 할 수 있다.adder.addint()호출 시 내부 에서 C 함수 addint 호출.ctypes 인 터 페 이 스 는 C 함 수 를 호출 할 때 원생 Python 의 기본 문자열 형 과 정형 을 사용 할 수 있 도록 합 니 다.
 다른 불 형 과 부동 소수점 형 같은 유형 에 대해 서 는 정확 한 ctype 형식 을 사용 해 야 합 니 다.adder.addfloat()함수 가 전 삼 될 때,우 리 는 먼저 Python 의 10 진법 값 을 c 로 바 꿔 야 합 니 다.float 형식,그리고 나 서 야 C 함수 에 전송 할 수 있 습 니 다.이런 방법 은 간단 하고 뚜렷 하지만 제한 을 받는다.예 를 들 어 C 에서 대상 을 조작 할 수 없다.
 윈도 우즈
 1.C 언어 프로그램 을 준비 하여 add.c 로 저장
 위 와 같다
 2.dll 라 이브 러 리 로 컴 파일
 cygwin 에서 실행:gcc-shared-wl,-soname,adder-o adder.dll-fpIC add.c
 3.python 코드 를 준비 하여 python-c.py 로 저장 합 니 다.

import ctypes
 
#load the shared object file
adder = ctypes.cdll.LoadLibrary('.\\adder.dll')
 
#Find sum of integers
res_int = adder.add_int(4,5)
print("4 + 5 = " + str(res_int))
 
#Find sum of floats
a = ctypes.c_float(5.5)
b = ctypes.c_float(4.1)
 
add_float = adder.add_float
add_float.restype = ctypes.c_float
 
print("5.5 + 4.1 = " + str(add_float(a, b)))
 4.테스트
 powershell 에서 실행:.\python-c.py 다음 오류 가 발생 합 니 다:
 OSError: [WinError 126]

 원인:adder.dll 자 체 는 다른 라 이브 러 리 에 의존 합 니 다.이 라 이브 러 리 를 현재 디 렉 터 리 로 복사 해 야 합 니 다.
 cygwin 에서 실행:ldd adder.dll
 알림 의존 라 이브 러 리

 이 라 이브 러 리 를 현재 디 렉 터 리 로 복사 하여 실행:cp xxx.dll.
 powershell 에서 다시 실행:.\python-c.py
 결 과 는 다음 과 같다.

총결산
python 3 호출 c 언어 코드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python 3 호출 c 언어 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기