>  기사  >  백엔드 개발  >  Python에서 C++ 코드를 사용하는 방법

Python에서 C++ 코드를 사용하는 방법

(*-*)浩
(*-*)浩원래의
2019-07-04 09:20:174984검색

파이썬은 개발 효율이 높고 사용하기 쉽다는 장점이 있고, C++는 운영 효율성이 높다는 것은 누구나 알고 있습니다. 파이썬 프로젝트에 C++ 코드를 삽입하든, 파이썬에서 구현하든 둘은 서로 보완할 수 있습니다. C++ 프로젝트 주변 기능의 경우 Python이 C++ 모듈을 호출해야 할 수도 있습니다.

Python에서 C++ 코드를 사용하는 방법

원본 내보내기

(권장 학습:
Python 비디오 튜토리얼

)

#🎜🎜 # Python 인터프리터는 C로 구현되므로 C++ 데이터 구조를 Python에서 이해할 수 있는 한 이론적으로는 직접 호출할 수 있습니다. test1.cpp를 다음과 같이 구현합니다

#include <Python.h>
int Add(int x, int y)
{
return x + y;
}
int Del(int x, int y)
{
return x - y;
}
PyObject* WrappAdd(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Add(x, y));
}
PyObject* WrappDel(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Del(x, y));
}
static PyMethodDef test_methods[] = {
{"Add", WrappAdd, METH_VARARGS, "something"},
{"Del", WrappDel, METH_VARARGS, "something"},
{NULL, NULL}
};
extern "C"
void inittest1()
{
Py_InitModule("test1", test_methods);   
}

컴파일 명령은 다음과 같습니다

g++ -fPIC -shared test1.cpp -I/usr/include/python2.7 -o test1.so
-fPIC: 위치 독립적 생성 동적 연결에 적합한 대상 코드입니다.

-L 경로: 경로 디렉터리에서 라이브러리 파일을 검색하는 것을 의미합니다. 예를 들어, -L은 현재 디렉터리에서 검색한다는 의미입니다. 경로 디렉터리에서

-o file: 출력 파일을 파일로 지정합니다. -shared: 공유 라이브러리 파일을 생성합니다.

Python 인터프리터를 실행합니다. 다음과 같이 테스트


>>> import test1
>>> test1.Add(1,2)
3


여기에 참고할 몇 가지 사항

생성된 동적 라이브러리 이름이 test1인 경우 소스 파일 inittest1 함수가 있어야 하며, Py_InitModule One 매개변수는 "test1"이어야 합니다. 그렇지 않으면 Python 가져오기 모듈이 실패합니다. cpp 소스 파일인 경우 inittest1 함수는 extern "C로 수정되어야 합니다. ", c 소스 파일이라면 필요하지 않습니다. 그 이유는 Python 인터프리터가 라이브러리를 가져올 때 initxxx와 같은 함수를 찾고 C와 C++는 함수 기호를 인코딩할 때 함수 길이와 매개변수 유형을 다르게 고려하기 때문입니다. 따라서 nm test1을 전달할 수 있습니다. 함수 기호를 확인하면 c++filt 도구는 기호를 통해 함수 프로토타입을 디코딩할 수 있습니다.

위 내용은 Python에서 C++ 코드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.