c-interop

Version, currently master branch1 version
  • master branchlatestSep 22, 2017

github.com/ethagnawl/crystal-c-interop-demo

Experimenting with Crystal's C interop capabilities

2 stars
0 dependents
License: MIT

Installation

# Add this to your shard.yml
dependencies:
  c-interop:
    github: ethagnawl/crystal-c-interop-demo
    branch: master

master is a branch, not a release, so this tracks it rather than pinning a version.

Then run:

shards install

shard.yml

Crystal
0.21.0
License
MIT
Author
Peter Doherty
Target
  • c-interop from src/c-interop.cr

Dependencies

This version declares no dependencies.

README

Overview

After having been intrigued by Crystal's C interop facilities while reading through the docs, I decided to write a C library (my first!) and try linking it into a program. The library provides one function (hello), which accepts one parameter and uses it to print a heartfelt message (e.g. Hello, world!).

I ran into one issue along the way, but I believe that was a result of my ignorance about the C library ecosystem. I also went off the rails a bit because I was using a static library and not something available via pkg-config. Either way, once I figured out how to supply the path to my static library to @[Link], everything Just Worked.

Build

  • pushd ./src/c && make && popd
  • crystal build src/c-interop.cr

Run

./c-interop # => Hello, world!

Interesting bits

  • ./src/c/lib/hello.c
  • ./src/c-interop.cr

Resources

  • http://www.cs.dartmouth.edu/~campbell/cs50/buildlib.html
  • https://randu.org/tutorials/c/libraries.php