Como utilizar uma biblioteca feita em C com python

Boa noite! Por vezes uma linguagem de programação como python (embora poderosa e versátil) pode necessitar de mais potência ou acesso a bibliotecas de sistemas. Para fazer uso de uma biblioteca dinâmica como .DLL (windows) ou .SO (linux), pode fazê-lo da seguinte forma:

Neste caso, vamos criar uma biblioteca de testes em C para linux (o mesmo código C e python pode ser usado no Windows).

  • Primeiro passo, criamos a biblioteca com o seguinte código de linguagem C:
user@host:~$ cat testintegration.c
#include <stdio.h>
#include <stdlib.h>

#ifdef _WIN32
#   define DLL_EXPORT __declspec(dllexport)
#else
#    define DLL_EXPORT
#endif

DLL_EXPORT int sum(int a, int b) {
   int res = 0;
   res = a + b;
   printf("ResC: %d\n",res) ;
   return res;
}

  • Para a compilar usamos o seguinte comando (substituir biblioteca pelo nome da sua escolha):
user@host:~$ gcc -Wall -Wextra -O -ansi -pedantic -fPIC -shared LIBRERIA.c -o /tmp/LIBRERIA.so
  • Para o utilizar nesta língua, basta chamá-lo importando a classe cdll do módulo ctypes, após utilizar o método LoadLibrary da classe cdll, será possível chamar os métodos da biblioteca importada:
user@host:~$ python
Python 2.7.9 (default, Jun 29 2016, 13:08:31) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import cdll;
>>> mydll = cdll.LoadLibrary('/tmp/LIBRERIA.so')
>>> mydll.sum(2,'a')
ResC: 1456018974
1456018974

Mais informações em http://wolfprojects.altervista.org/articles/dll-in-c-for-python/

Deixe um comentário