Re: Loading/registering multiple xsubs

[email protected] (Torsten Schoenfeld)
Newsgroups perl.xs
Message-ID <[email protected]>
On 12.10.2011 15:24, Jeffrey Ratcliffe wrote:
> On 12 October 2011 13:11, Torsten Schoenfeld<[email protected]>  wrote:
>> You have to call Foo_Bar.xs' BOOT section (which wires up the xsubs) from
>> Foo.xs' BOOT section.  Look at Glib.xs' BOOT section for an example.  For
>> Gtk2 and below, this is handled by Gtk2::CodeGen->write_boot.
>
> Thank you for your quick response. I'm still struggling, so I made a
> small example  (attached), which fails to compile, trying to base the
> boot mechanism on that in Glib:
>
> foo.xs: In function 'void boot_Foo(PerlInterpreter*, CV*)':
> foo.xs:18: error: expected unqualified-id before string constant
> foo.xs:18: error: 'boot_Foo__Bar' was not declared in this scope

Looks like Glib's mechanism is not C++-safe: specifically, the "extern 
XS" trick does not work because boot_Foo is already inside an <extern 
"C"> section.  Try this:

At the top of Foo.xs:

	extern "C" XS_EXTERNAL (boot_Foo__Bar);

In its BOOT section:

	_gperl_call_XS (aTHX_ boot_Foo__Bar, cv, mark);

If you want some backwards-compatibility, use

	#ifndef XS_EXTERNAL
	# define XS_EXTERNAL(name) XS(name)
	#endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.