CPAN Module Device::USB für Win32 compilieren und installieren

Die Installation eines Module für Inline C unter Win32 erfordert MinGW und MSYS

Hinweis: Ganz unten auf der Seite ist ein Link zu einer für Perl 5.16 kompilierten Binary die ganz einfach mit ppm installiert werden kann. Hierfür ist ein Compiler nicht erforderlich.

Module welche die Perl-API nutzen, benötigen einen der in Perl eingebundenen Programmiersprache entsprechenden Compiler. Das CPAN-Modul Device::USB nutzt die in C programmierte LibUSB und benötigt somit einen C-Compiler. Der hier vorliegenden Installationsanleitung liegt die Windows-Entwicklungsumgebung MinGW+MSYS zugrunde, zur Installationsanleitung siehe also da und hier ein paar Zeilen zum Einrichten; damit die Preprocessor-Anweisung #include <usb.h> nicht ins Leere greift, sind untenstehende Dateien aus dem LibUSB-Win32-Verzeichnis in die Verzeichnisstruktur der Entwicklungsumgebung zu kopieren:

ln -s d:/2inst/libusb-win32-bin-1.2.6.0/include/lusb0_usb.h
    /mingw/include/usb.h

ln -s d:/2inst/libusb-win32-bin-1.2.6.0/lib/gcc/libusb.a
    /mingw/lib/libusb.a

ln -s d:/2inst/libusb-win32-bin-1.2.6.0/bin/x86/libusb0_x86.dll
    /mingw/bin/libusb0.dll

Das Kommando:

D:\>perl -V:make
Set up gcc environment - 5.3.0
make='C:\Perl\site\bin\dmake.exe';

sollte also eine Ausgabe wie obenstehend erzeugen, woran zu sehen ist, dass die Entwicklungsumgebung steht und wie das Make-Utility namentlich heißt.

USB-Geräte, die über diese Library angesteuert werden sollen müssen zunächst über den Windows-Gerätemanager auf LibUSB-Win32 umgestellt werden. Dazu kommt die LibUSB-Win32 mit einem Inf-Wizard, welcher dieses Einrichten erleichtert. Für das auf LibUSB umgestellte Gerät sind untenstehende Dateien relevant:

c:\windows\system32\drivers\libusb0.sys
c:\windows\system32\libusb0.dll

Im Folgenden beschreibe ich, wie das CPAN-Modul so zu ändern ist, dass es in einer Win32-Umgebung funktioniert. Das Archiv von CPAN downloaden und untenstehende Dateien in einem lokal angelegten Verzeichnis lib/ auspacken, siehe Verzeichnisstruktur:

lib\---Device
    |   USB.pm
    |
    \---USB
            Bus.pm
            DevConfig.pm
            DevEndpoint.pm
            Device.pm
            DevInterface.pm
            FAQ.pod

Die Datei USB.pm wird wie folgt geändert, wichtig ist die Übereinstimmung der Versionsangabe mit der Deklaration weiter unten:

use Inline (
    C => "DATA",
    LIBS => '-lusb',
    NAME => 'Device::USB',
    VERSION => '0.21',
);

# muss übereinstimmen
our $VERSION='0.21';

Nun erstellen wir oberhalb des lib-Verzeichnisses die Datei Makefile.PL mit untenstehendem Inhalt:

use Inline::MakeMaker;
WriteMakefile(
    NAME          => 'Device::USB',
    VERSION_FROM  => 'lib/Device/USB.pm',
    PREREQ_PM     => {},
);

CONFIGURE_REQUIRES => {
    'Inline::MakeMaker'   => 0.45,
    'ExtUtils::MakeMaker' => 6.52
};

rufen den Perl-Interpreter mit dieser Datei auf (perl Makefile.PL) und anschließend das Utility make. Im Ergebnis entstehen ein paar neue Dateien, von Interesse ist die Datei Makefile und ein von make angelegtes Verzeichnis blib (Build-Lib). Da make den C-Compiler aufruft, wird in der Console Einiges an Meldungen erscheinen und idealerweise keine Fehlermeldungen.

Wenn keine Fehler aufgetreten sind, wird der Aufruf von make install sämtliche für das Modul erforderliche Dateien nach Perl's site/lib kopieren und somit eine dauerhafte Installation vollbringen. Gleichermaßen wird die POD-Dokumentation als HTML exakt an der richtigen Position in die PerlGesamt-Dokumentation eingebaut.

Package für PPM erstellen

Es ist schon fast ein Witz wie einfach das ist:

In der mit dem Make-Utility soeben erstellten Datei Device-USB.ppd ist lediglich das Attribut HREF="Device-USB.zip" anzupassen. Beide Dateien im Web publizieren womit sie mit untenstehender Kommandozeile auf jeder Win32-Maschine installiert werden können.

PPM Installation Ohne C-Compiler

Package ist compiliert für
MSWin32-x86-multi-thread-5.16
libusb-win32-bin-1.2.6.0

Auf der Kommandozeile einfach eingeben:
ppm install http://rolfrost.de/Device-USB.ppd

Auch diese Installation baut die POD in die HTML-Perldoc ein. Sie kann ebenso mit dem Kommando perldoc Device::USB wie gewöhnlich aufgerufen werden.


Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.