Eine C-Extension ist eine Ruby-Erweiterung, die in C geschrieben ist. Meist handelt es sich dabei um ein Gem, aber da dies nicht zwangsläufig erforderlich ist, hält Ruby den Ordner site_ruby bereit, in welchem nicht-Gem-gebundene C-Extensions verstaut werden.
EinbindenDas Einbinden einer C-Extension funktioniert genauso wie das Einbinden einer Ruby-Datei, per require. Jede C-Extension besitzt mindestens eine Datei mit der system-nativen Endung für Linkdateien, z.B. .o, .so, .dll oder .bundle. Diese Datei ist die eigentliche C-Extension. Wird sie eingebunden (und hat sie keine anderen Abhängigkeiten), kann mit der C-Extension genauso verfahren werden wie mit einer normalen Ruby-Erweiterung.
Nicht Gem-gebundene C-Extensions können genauso eingebunden werden, da sich das Verzeichnis site_ruby bereits im Suchpfad $: befindet. Erstellen einer C-ExtensionDies ist eine kleine Zusammenfassung, welche Schritte minimal nötig sind, um eine C-Extension für verschiedene Ruby-Versionen zu erstellen. VorbereitungDass zum Erstellen zumindest minimale C-Kenntnisse erforderlich sind, braucht wohl nicht weiter erwähnt zu werden. Die Ruby-Community verweist in diesem Punkt immer gern auf das Buch The C Programming Lanugage. Außerdem sollte man sich in Rubys C-API einarbeiten. Eine größtenteils ausreichende Einführung bietet die Datei README.ext aus dem Ruby-Sources-Archiv jeder Ruby-Version (downloadbar von ftp://ftp.ruby-lang.org/pub/ruby/ ); etwas ausführlicher ist die API-Dokumentation auf ruby-lang.org, die dem aktuellen Stand mit der Version 1.8.4 aber leider deutlich hinterher hinkt. Um den Prozess des Erstellens abzukürzen, werde ich die folgende C-Extension mit dem Namen »example.c« verwenden:
Außerdem muss für jede C-Extension eine Datei namens extconf.rb erstellt werden. Deren minimaler Inhalt sieht so aus:
In der extconf.rb lassen sich aber auch noch viel mehr Dinge festlegen; zum Beispiel könnte man überprüfen, ob das kompilierende System bestimmte Programmbibliotheken besitzt. Linux
MinGWEingaben im MSYS-Prompt.
WindowsDas ist etwas komplizierter. Zunächst muss das »Microsoft Windows Software Development Kid« installiert werden (kurz Windows SDK, kostenlos): http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&displaylang=en (Obwohl da Windows 7 draufsteht, sollte es auch für Vista und XP laufen). Vollständig wären das über 5GB, aber die Dokumentation kann man weglassen, wenn der Installer danach fragt (die gibt's auch online bei MSDN).
Das verhindert natürlich jegliches Erstellen von C-Extensions mit modernen Compilern. Kommentiere dies einfach aus.
Mac OS X
Ergebnis betrachten
Siehe auch
|
|||||||||||||||||||||||