From: Joel VanderWerf Date: 2009-09-13T10:26:11+09:00 Subject: Re: Using Data_Make_Struct for incomplete type Erik Lindblad wrote: > On 12 Sep, 21:39, Joel VanderWerf wrote: >> Erik Lindblad wrote: >>> Hi all >>> I am writing a Ruby wrapper for a C library. I can wrap some of the C >>> structs with Data_Make_Struct but for one of them I get "invalid >>> application of sizeof to incomplete type". I expect this has something >>> to do with that the compiler cannot find a definitive size of the >>> struct. >> Have you included all the relevant headers? >> >> -- >> vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407 > > Yes, I can do both Data_Wrap_Struct for other structs in the same > library, and create "instances" of the struct in question. The struct > is defined in a lib that I only have as a binary so I cannot > experiment with the source. > > I have tried both with Data_Make_Struct and with a construct I found > in a blog post: > > struct_name* s = (struct_name*)malloc(sizeof(struct_name)); > VALUE obj; > obj = Data_Wrap_Struct(klass, 0, terminate, s); > > Both result in the same compile message: > > invalid application of sizeof to incomplete type s > > The struct contains arrays of pointers to other structs so my guess is > that it has something to do with that the compiler cannot figure out a > definitive size to use for the struct. If that is the case I have no > idea how to work around that. If you don't at least have the headers[1] it will be hard to do much with the struct, except pass it back in to the functions of the library. Maybe that's enough. In that case, if you can at least determine the size of the struct, you can define a dummy struct of that size, and that may work, in a fragile sort of way. [1] Having the headers is not necessarily the same as having the full source. I'm assuming that in your case the problem will not be solved by installing the -dev package of the library? -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407