程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【C/Python聯動編程】Python使用C動態庫

編輯:Python

文章目錄

      • Python首先導入模塊
      • C代碼
      • 編譯
      • 完善Python代碼
      • 錯誤排除
          • `AttributeError: ./庫文件名: undefined symbol: 函數名`
          • `OSError: py_test_libc.so: cannot open shared object file: No such file or directory`
          • `OSError: ./py_test_libc.so: only ET_DYN and ET_EXEC can be loaded`

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


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved