### 1. Python/C API
Python/C API는 가장 기본적인 방법으로, Python 인터프리터에 직접 접근할 수 있습니다. 이 방법은 매우 유연하고 강력하지만, 상대적으로 복잡하고 오류가 발생할 가능성이 있습니다.
#### 간단한 예제:
1. **Python 함수 호출 (C 코드):**
```cpp
#include <Python.h>
int main() {
Py_Initialize();
PyObject *pName, *pModule, *pFunc;
PyObject *pArgs, *pValue;
pName = PyUnicode_DecodeFSDefault("my_python_script");
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule, "my_function");
if (PyCallable_Check(pFunc)) {
pArgs = PyTuple_Pack(1, PyLong_FromLong(42));
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL) {
printf("Result: %ld\n", PyLong_AsLong(pValue));
Py_DECREF(pValue);
}
else {
PyErr_Print();
}
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
}
else {
PyErr_Print();
}
Py_Finalize();
return 0;
}
```
2. **my_python_script.py 파일:**
```python
def my_function(x):
return x * 2
```
### 2. SWIG (Simplified Wrapper and Interface Generator)
SWIG는 다양한 언어(특히 C++와 Python) 간의 인터페이스를 자동으로 생성해주는 도구입니다. 이를 통해 C++ 코드를 Python에서 사용할 수 있습니다.
#### 간단한 예제:
1. **인터페이스 파일 (example.i):**
```swig
%module example
%{
#include "example.h"
%}
extern int add(int a, int b);
```
2. **C++ 코드 (example.cpp):**
```cpp
#include "example.h"
int add(int a, int b) {
return a + b;
}
```
3. **헤더 파일 (example.h):**
```cpp
int add(int a, int b);
```
4. **SWIG 명령어 및 빌드:**
```sh
swig -python -c++ example.i
g++ -shared -o _example.so example_wrap.cxx example.cpp -I/usr/include/python3.8
```
5. **Python에서 사용:**
```python
import example
print(example.add(2, 3)) # Output: 5
```
### 3. ctypes
Python의 `ctypes` 라이브러리는 C로 작성된 작업을 직접 호출할 수 있습니다. 이를 통해 컴파일된 동적 라이브러리(.so, .dll)를 직접 로드하고 함수 호출을 할 수 있습니다.
#### 간단한 예제:
1. **C 코드 (my_c_code.c):**
```c
#include <stdio.h>
void my_function(int n) {
printf("Number is: %d\n", n);
}
```
2. **컴파일:**
```sh
gcc -shared -o my_c_code.so -fPIC my_c_code.c
```
3. **Python 코드:**
```python
from ctypes import CDLL
my_c_code = CDLL('./my_c_code.so')
my_c_code.my_function(42) # Output: Number is: 42
```
### 4. Cython
Cython은 Python 코드를 C로 컴파일하여 성능을 개선할 수 있는 강력한 도구입니다. 이는 C/C++ 코드를 Python 코드에 직접 통합할 수 있는 간편한 방법을 제공합니다.
#### 간단한 예제:
1. **Cython 파일 (example.pyx):**
```cython
cdef extern from "example.h":
int add(int a, int b)
def py_add(int a, int b):
return add(a, b)
```
2. **setup.py 파일:**
```python
from setuptools import setup, Extension
from Cython.Build import cythonize
setup(
ext_modules = cythonize(Extension(
"example", # module name
sources=["example.pyx", "example.cpp"], # source files
language="c++"
))
)
```
구글 검색에 잘 노출 되도록 작업
'C++' 카테고리의 다른 글
C++ 17, C++ 20 OOP, FP (0) | 2019.01.30 |
---|---|
바이너리 연결 기술 (0) | 2019.01.27 |
COM(Component Object Model) 개요 및 python 통합 고려. (6) | 2019.01.06 |
`constexpr`을 전체 코드에 일괄적으로 적용하는 것은 현실적이지 않을 수 있지만, (0) | 2019.01.06 |
C++ Friend class/function 프렌드함수 (0) | 2019.01.06 |
최근댓글