in reply to Re: What's the "modern" way to talk to C libraries?
in thread What's the "modern" way to talk to C libraries?
This was my initial step, too: Run the PipeWire tutorial sources in Inline::C. But then, I did not want write my own stuff in C.
And yes, handling structs is the interesting part. PipeWire comes with ~200 header files and way too many structs to do that manually. Convert::Binary::C (CBC) does exactly this: Convert a C struct into a Perl hash (reference) at runtime. It also provides all the meta data I need: If a struct contains a struct some *thing, then the conversion will give me a Perl scalar containing the pointer as an integer value, and CBC also tells me that this scalar is a pointer to struct some, which then can be recursively unraveled. That's pretty awesome.
CBC is not error prone at runtime: It does not cause segfaults. It says that it can not handle the syntax in some header files which happens during the development cycle. Working around this is a bit annoying, but not impossible.
The main downside with my current project is the lack of portability. PipeWire is Linux-only, no chance on Windows. Its headers can only be compiled with GCC, not a big restriction when we are on Linux anyway. It also does not work with system Perl (or any other Perl built with useithreads=define). So while I can shrug it away, that code is unlikely to be useful on CPAN and will never make it into a Linux distribution.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: What's the "modern" way to talk to C libraries?
by cavac (Prior) on Nov 24, 2025 at 15:08 UTC |