파이썬은 개발 효율이 높고 사용하기 쉽다는 장점이 있고, C++는 운영 효율성이 높다는 것은 누구나 알고 있습니다. 파이썬 프로젝트에 C++ 코드를 삽입하든, 파이썬에서 구현하든 둘은 서로 보완할 수 있습니다. 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: 위치 독립적 생성 동적 연결에 적합한 대상 코드입니다.
-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 중국어 웹사이트의 기타 관련 기사를 참조하세요!