On Wed, May 28, 2008 at 06:04:09PM +0800, Kaiwang Chen wrote: > Hello, > > Inline::C automatically includes some header files, one of which has > typedef conflicts with my custom definition(see bellow). Is there some > way to disable inclusion of certain system header files? Thanks in > advance.
> $ ./inline.pl > /usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp > -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap inline_pl_1ecd.xs > > inline_pl_1ecd.xsc && mv inline_pl_1ecd.xsc inline_pl_1ecd.c > gcc -c -I/home/kwchen/tmp -D_REENTRANT -D_GNU_SOURCE > -fno-strict-aliasing -pipe -Wdeclaration-after-statement > -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 > -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 > -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 > -mtune=generic -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" -fPIC > "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" > inline_pl_1ecd.c > inline_pl_1ecd.xs:6: error: conflicting types for ???U8??? > /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/handy.h:148: > error: previous declaration of ???U8??? was here > make: *** [inline_pl_1ecd.o] Error 1 That's not a system header. That's a header that's part of the Perl core, which (unfortunately) means that it's necessary to the workings of Inline. So there isn't going to be a way to suppress its inclusion. I think to make this work you'll need to make some sort of trivially thin wrapper functions that have function declarations in a header file that includes neither conflicting definition of U8. That way you can wrap those wrappers with Inline::C (which includes Perl's definition of U8), but declare them in a file that include the other headers that define U8. You'll need to get Inline to link to the object file created from the wrapper function file, which I'm not sure how to do, but can be done. Nicholas Clark