python调用SO动态库的函数

python调用SO动态库的函数

代码

C代码:test.c

// test.c
// gcc -shared -o test.so test.c 

#include <stdio.h>
#include <stdlib.h>

int add(int a, int b) {
    return a+b ;
}


int sub(int a, int b) {
    return a-b ;
}

void prnt(const char * sss) {
    printf("%s\n", sss) ;
}

python代码:test.py

#!/usr/bin/env python3.9
# -*- coding: utf-8 -*-

import ctypes
import io
import os

SoPath="./test.so"

libso = None
def parse_so() :
    global libso
    if libso is not None:
        return libso

    libso = ctypes.CDLL(SoPath)

    libso.add.argtypes = [ctypes.c_int, ctypes.c_int]
    libso.add.restype = ctypes.c_int

    libso.sub.argtypes = [ctypes.c_int, ctypes.c_int]
    libso.sub.restype = ctypes.c_int

    libso.prnt.argtypes = [ctypes.c_char_p]

    return libso

if __name__ == "__main__" :
    libso = parse_so()
    ret = libso.add(2, 3)
    print(ret)
    ret = libso.sub(10, 3)
    print(ret)
    libso.prnt(b"just print")

编译和测试

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注