Hi,
Actually, I think your code doesn't need to be in a subdirectory. It's
just that IIRC Inline looks for a slash ('/') to know if the specified
scalar is a filename or the source code itself. If you use
'./myCcode.c' it should work.
But in your case, you should be able to just read in the 2 files
yourself and send the code directly to Inline::C like this:
#!/usr/bin/perl
use strict ;
sub get_code {
my $code = '' ;
for my $src (@_){
$code .= join('', <SRC>) if open(SRC, $src) ;
}
return $code ;
}
use Inline(
C => get_code(qw(C/myCcode.c C/moreC.c),
) ;
or if your are lazier:
use Inline(
C => scalar `cat C/myCcode.c C/moreC.c`
) ;
Patrick
On Sun, Mar 30, 2008 at 1:41 PM, second axiom <[EMAIL PROTECTED]> wrote:
>
>
> Sisyphus <[EMAIL PROTECTED]> wrote:
> ----- Original Message -----
> From: "second axiom"
>
> To:
> Sent: Sunday, March 30, 2008 3:56 PM
> Subject: Inline::C - including an external file and nothing else
>
>
> > Hello.
> >
> > I'm able to create Perl script that uses Inline C and also links to a
> > precompiled C library, but I'm trying to do something else that I think
> > should be equivalent:
> >
> > #!/usr/bin/perl -w
> > use Inline C => <
> > #include
>
> > ENDC
> > test(2);
> >
> > I.e., if I paste the contents of myCcode.c in place of the #include, I get
> > the expected results. I'm trying to get Inline to do that and ignore the
> > fact that the code comes from a separate file, but it refuses to recognize
> > the functions in myCcode.c. (Basically, I prefer to avoid compiling the
> > code myself.)
> >
>
> I created a file called 'src/myCcode.c' which contained:
>
> void greet() {
> printf("Hello from myCcode.c\n");
> }
>
> I then ran the following Inline::C script:
>
> use warnings;
> use Inline C => 'src/myCcode.c';
> greet();
>
> which, behaved as desired and printed out (after compiling):
>
> Hello from myCcode.c
>
> However, for some reason, it seems that myCcode.c needs to be in a
> subdirectory. If it's placed in the same directory as the Inline::C script,
> it doesn't work. This is mentioned in 'perldoc Inline-FAQ'.
>
> Cheers,
> Rob
>
>
> Hi, Rob.
>
> Thanks for the reply; let me know if I'm breaking any rules of replies.
>
> I had indeed tried your suggestion (use Inline C => 'src/myCcode.c';) and
> gotten it to work, but my Inline::C script has additional C code that
> #include's myCcode.c. I'm able to call the functions in myCcode.c and access
> its global vars from Perl and from Inline::C, but the two are operating on
> separate instantiations of those variables.
>
> What I'm trying to accomplish seems to be a combination or modification of
> current options, a concatenation of a source file and the Inline::C code I
> have in the script:
>
> use Inline (C => 'C/myCcode.c', <<ENDC);
> [new C code here]
> ENDC
>
> OR a concatenation of two source files:
>
> use Inline (C => 'C/myCcode.c', 'C/moreC.c');
>
> (Or both, for that matter.) This would mean that any calls from Perl or from
> the Inline::C code would be operating on the same instantiation of the global
> variables in C/myCcode.c. This alternative fails, but for another reason:
>
> use Inline C => <<ENDC, AUTO_INCLUDE => '#include "C/myCcode.c"';
>
> OR:
>
> use Inline C => <<ENDC
> #include "C/myCcode.c"
>
> In both cases, Inline::C can access the functions and vars in myCcode.c,
> but Perl cannot.
>
> It doesn't matter to me if this is accomplished through eval, symbolic
> links, whatever. Based on your reply to a previous question, it sounds like I
> need to modify C.pm.
>
> Thanks again.
>
> AndyD
>
>
>
> ---------------------------------
> OMG, Sweet deal for Yahoo! users/friends: Get A Month of Blockbuster Total
> Access, No Cost. W00t
--
=====================
Patrick LeBoutillier
Laval, Québec, Canada