swig fora do prompt, como?

1. swig fora do prompt, como?

Estevão Dominique Ribeiro Dias
estevaodrdias

(usa openSUSE)

Enviado em 30/06/2012 - 16:51h

Olá pessoal, tudo bem? Confesso que há algum tempo não me envolvo em um projeto sério, mas que fiquei tentado a testar a depuração de módulos escritos em C com Swig através do prompt, acreditando ser uma ótima ideia e para poupar tempo e futuramente esforço na fase de prototipagem de novos projetos. Realmente é uma excelente ferramenta. Mas minha surpresa: o mesmo código que roda tinindo no prompt não roda quando executado a partir de um script simples. Qual a razão? Alguém pode me ajudar? Abaixo o código:

INTERFACE

/* File: example.h */

int fact(int n);

IMPLEMENTAÇÃO

/* File: example.c */

#include "example.h"

int fact(int n)
{
return (n <= 0) ? 1 : n * fact(n - 1);
}

SWIG

/* File: example.i */
%module example

%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}

%include "example.h"

SCRIPT

import _example

if __name__ == "__main__":
print _example.fact(9)

ERRO
./program.py: linha 4: erro de sintaxe próximo do `token' não esperado `('
./program.py: linha 4: ` print _example.fact(9)'

COMPILAÇÃO
gcc -g -fPIC -c -Wall -Werror example.c example.h
swig -python example.i
gcc -g -fPIC -c -Wall -Werror example_wrap.c -I/usr/include/python2.7
gcc -shared example.o example_wrap.o -o _example.so




  


2. Ops!

Estevão Dominique Ribeiro Dias
estevaodrdias

(usa openSUSE)

Enviado em 01/07/2012 - 17:34h

Descobri o que estava acontecendo, faltou eu instalar o pacote python-ctypeslib. Agora está rodando das duas formas abaixo:

import _example

print _example.fact(25)


from ctypes import *

cdll.LoadLibrary("./_example.so")
libc = CDLL("./_example.so")
print libc.fact(9)

Tem um ótimo tutorial sobre assunto em http://goo.gl/B1OOb. Fica pra registro para as futuras gerações...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts