文章目录
Python首先导入模块
from ctypes import cdll
# 此模块是Python内置的不需要下载
C代码
// py_test.c
#include <stdio.h>
int py_test(int n)
{
printf("传入参数: %d\n", n);
printf("Python调用C动态库成功!\n");
return 0;
}
编译
gcc py_test.c -shared -fPIC -o py_test_libc.so
完善Python代码
from ctypes import cdll
c_function = cdll.LoadLibrary("./py_test_libc.so")
res = c_function.py_test(123)
print(res)
错误排除
AttributeError: ./库文件名: undefined symbol: 函数名
不要在C代码中的函数前面带
static
关键字
OSError: py_test_libc.so: cannot open shared object file: No such file or directory
cdll.LoadLibrary()函数中的路径必须是绝对路径
OSError: ./py_test_libc.so: only ET_DYN and ET_EXEC can be loaded
编译语句请不要加
-c