'.so' file은 유닉스 계열 운영체제에서 사용되는 공유 라이브러리 파일이다.
C/C++로 작성된 소스코드를 컴파일하여 생성한다.
C 소스코드 작성
# 'mylib.c'
int add (int a, int b) {
return a + b;
}
적절한 기능을 가진 C 소스 코드를 작성한다.
컴파일 명령 실행
gcc -shared -o mylib.so -fPIC mylib.c
-shared: 공유 라이브러리를 생성
-o: 출력 파일의 이름 지정
-fPIC: 위치 독립 코드(Position Independent Code) 생성
.so 파일 생성 확인
현재 디렉토리에 'myjlib.so' 파일이 생성되었는지 확인
'.so' 파일은 C/C++로 작성된 기능을 Python 등 다른 프로그래밍 언어에서 사용할 수 있는 형태로 제공한다.
Python Wrapper
import ctypes
# ```
# ctypes 모듈 사용해 c함수 호출하는 wrapper
# ```
path = './mylib.so'
# add 함수 signiture 정의
lib = ctypes.CDLL(path) # CDLL: C 라이브러리 로드
lib.add.argtypes = (ctypes.c_int, ctypes.c_int) # argypes: c 함수의 인자 타입 정의
lib.add.restype = ctypes.c_int # restype: c 함수의 반환 타입 정의
# C 함수 호출
result = lib.add(2, 3) # c 함수 반환 후 결과 출력
print(result)
+ Windows
1. Set up
add.dll
add_wrapper.py
2. Implementation
2.1 Import
from ctypes import *
from sys import platform
2.2 Load library
shared_lib_path = "./add.so"
if platform.startswith('win32'):
shared_lib_path = "./add.dll"
try:
add_lib = CDLL(shared_lib_path)
print("Successfully loaded ", add_lib)
except Exception as e:
print(e)
더 알아보기..
'👩💻 도비는 공부중 > 💼 하계연구연수생(2023)' 카테고리의 다른 글
[PyQt5] Python을 위한 GUI 라이브러리 (0) | 2023.07.14 |
---|---|
[Binary Protocol] (0) | 2023.07.13 |
[C/C++] Dynamic-link Libraries (in Windows) (1) | 2023.07.12 |
[기술 동향] (0) | 2023.07.12 |
[Python] Flask 기초 (0) | 2023.07.11 |