Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
I think that Inline::C already nicely handles the cases where additional C code has been compiled into object files or a library.
This is aimed at accommodating additional C code without having to do any pre-compiling.
This is pretty common in XS modules. I've done it myself in Math::Ryu, and you'll find it in ScalarList::Utils - to name just one of many other examples.

One unnecessary thing I've done in my demo script, is to #include the 2 headers ('bar.h' and 'baz.h').
In general, one might want to avoid doing that because those headers might define something that clobbers perl.
Removing the inclusion of those headers from the script still allows the script to work just fine, though "implicit declaration of function" warnings are emitted at compile-time for both bar and baz. Those warnings can be silenced by declaring:
extern int bar (int); extern int baz (int);
in the script. In checking up on these things, I changed baz.h to:
#define NVSIZE 100 int baz (int);
and baz.c to:
#include "baz.h" int baz (int in) { return in + NVSIZE; }
(That was just to check that my perl's NVSIZE, which is defined to 8, did not get clobbered.) The demo became:
use warnings; use Inline C => Config => BUILD_NOISY => 1, OBJECT => ['bar', 'baz'], ; use Inline C =><<'EOC'; extern int bar (int); extern int baz (int); void foo(int i) { printf("bar: %d\n", bar(i)); printf("baz: %d\n", baz(i)); printf("NVSIZE: %d\n", NVSIZE); } EOC foo(42);
which, after compiling cleanly, output:
bar: 42 baz: 142 NVSIZE: 8
I might one day tidy the C.pm patch up a bit, create a test case, and file a PR with Inline::C.
At the moment, I'm not sure if I'm overlooking something significant.
(As previously mentioned, with the present patch, the '.h' and '.c' files need to be in the cwd. I've decided that I would prefer to keep it that way.)

Thanks bliako - always good to get some feedback from you !

Cheers,
Rob

In reply to Re^6: Better way to force Inline to use compiled binary instead of C source? by syphilis
in thread Better way to force Inline to use compiled binary instead of C source? by vr

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (2)
As of 2024-04-20 04:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found