[review] [PyKDE] Help on wrapping a C library
Jim Bublitz
jbublitz at nwinternet.com
Mon May 23 22:12:05 BST 2005
On Monday 23 May 2005 11:38, huaicai wrote:
> Hi all,
>
> I was trying to use SIP to wrap a C library GTS(gnu triangular surface). I
> am new to the SIP tool, so before wrapping GTS, I am learning to wrap a
> simple C libary just like the C example(word) in the SIP reference guide.
>
> I implemented the "Word" libary in C and a C test program works fine by
> using the libary. I got a "segmentation fault" error when I call the
> reverse() in python as follows:
> import word
> w = word.create_word("How are you?")
> print word.reverse(w)
> I added another reverse function into the "word" library like: "char
> *myReverse(const char *w);". It works fine in python when I do this:
> print word.myReverse("How are you?")
>
> Please see the C source/header file and SIP specification file in the
> attachments. Can any one tell me what's wrong?
>
> Thank you very much! I really appreciate your help.
>
> Huaicai
It might not strictly be required, but I'd add:
%ModuleHeaderCode
#include <word.h>
%End
after the %CModule line (although it seems like you'd get compile errors if it
was really necessary - might depend on whether sip generated code is
concatenated for compiling or not).
You might also try:
Word *create_word(const char *);
char *reverse(Word *);
char *myReverse(const char *);
removing "struct" in two places (not sure if it's required or makes a
difference as far as sip is concerned - I believe it's not necessary though).
Also, in Python, try printing w.the_word before calling reverse.
You could also try making Word a class:
class Word
{
public:
char *the_word;
};
At one time (long ago) I had problems doing structs with sip, but I think
that's been fixed for quite a while.
Otherwise, I don't see any obvious errors in the sip file. I'd also look at
how the module is linked and if the .so file being wrapped can be found at
runtime.
Jim
More information about the PyQt
mailing list