Wie erzeuge ich eine ausführbare Datei mit PAR?
Inhalt:
PAR
PAR ist ein Modul von Autrijus Tang, mit dem ausführbare Dateien erzeugt werden können.
Arbeitsweise
PAR erstellt ein Archiv, ähnlich den .jar-Dateien bei Java. Man kann also die einzelnen
Dateien ansehen.
Mit PAR kann man seinen Quellcode nicht "unlesbar" machen. Jeder, der weiß, dass es eine mit
PAR gepackte Datei ist, kann sich den Inhalt mit einem Archiv-Programm wie WinZip oder WinRAR
anschauen.
Das Modul eignet sich trotzdem hervorragend, um Programme zu verteilen. Stellen Sie sich vor, Sie
schreiben ein Programm und Ihr Kollege in der Produktionsabteilung soll das Programm benutzen, hat
jedoch kein Perl installiert - was nun?
Entweder beim Kollegen Perl installieren - nein, soll nicht gemacht werden. Selbst wenn Perl installiert
wird, müssten noch die ganzen Zusatzmodule installiert werden. Und dann hat man doch wieder eins vergessen...
Eine ganz praktische Lösung bietet hier PAR. Man entwickelt das Programm, führt PAR aus und gibt die Datei
an den Kollegen weiter.
Installation
Am besten nach dieser
Anleitung
Archiv erstellen
pp -o archiv.par -p script.pl
Skript ausführen (aus Archiv)
Executable erstellen
Die einfachste Möglichkeit, die ausführbare Datei zu erzeugen ist die Verwendung von
pp.
pp --output=test script.pl
Genausogut ist es möglich, mehrere Skripte zusammenzufassen:
pp --output=test script.pl script2.pl script3.pl
Executable ausführen
Bei Windows reicht ein Doppelklick auf die .exe.
Am einfachsten startet man das Programm in der Kommandozeile:
./test.exe
Möglichkeiten von pp
Mit
pp kann man nicht nur Archive packen und zu Executables umwandeln.
pp bietet einige Optionen, mit denen man viel erreichen kann. Einige dieser
Optionen werden hier aufgeführt:
pp -M Spreadsheet::SimpleExcel hello zusätzliches Modul
Probleme und Lösungen
Problem:
C:\Test>pp -o Programm.exe script.pl
Can't spawn "C:\usr\bin\parl.exe": Bad file descriptor at C:\usr\bin\pp line 372.
So hat's bei mir dann funktioniert:
Ich habe zuerst mit
pp -o Prog.par -p script.pl ein .par-Archiv erstellt und danach erst die
ausführbare Datei mit
pp -o Programm.exe Prog.par
Ich musste mittlerweile feststellen, dass das nicht das Problem war! Manchmal will parl.exe einfach nicht,
da hilft nur mehrmals hintereinander versuchen...
Problem:
C:\Test>pp -o Programm script.pl
Ich kann die erzeugte Datei jetzt nicht ausführen
Lösung:
Windows-Executables benötigen eine Dateiendung (.exe). Mit einem
C:\Test>pp -o Programm.exe script.pl
sollte eine Datei erzeugt werden, die auch ausführbar ist...
Problem:
Unter Windows taucht die DOS-Box auf. Ich habe aber ein GUI, da stört die
Box nur. Wie verhindere ich das aufpoppen der DOS-Box?
Lösung:
(von Strat im Forum):
Unter Windows kannst du auch mit der Option --gui das DOS-Fenster entfernen (aber erst, wenn das Programm ohne
diesen Parameter läuft, weil sonst die Fehlersuche unnötig erschwert wird).
pp --gui -o program.exe script.pl
Problem:
Mein Tk-Fenster zeigt nur noch kryptische Zeichen und nicht mehr den Original-Text. Es sieht jetzt
so aus:
Lösung:
Schreibe an den Anfang des Programms ein
use Encode::Unicode;. Das Problem besteht darin, dass
PAR (noch) nicht mit Unicode umgehen kann und daher die Zeichen nicht richtig anzeigt.
Problem
Ich benutze
__DATA__ in meinen Skripten/Modulen und dann will PAR nicht mehr.
Lösung:
Mache eine Leerzeile von
__DATA__
Problem
Meine Anwendung stürzt ab und die Ursache ist ein Verzeichnis
/tmp/par-hfk/cache-*
Lösung:
In diesem Cache können alte Zombies wiederbelebt werden. Um den Cache zu bändigen, muss die Anwendung mit der Option
--clean gebaut werden.
Problem
Auf meinem Rechner klappt alles, aber auf einem anderen Rechner bekomme ich eine Fehlermeldung, die so ähnlich wie
diese hier aussieht:
Lösung:
Es fehlt eine Library-Datei im par-Archiv. Einfach die fehlende(n) Libraries dazuladen. Dafür hat PAR die -l Option:
pp -l "vollerPfad\zurLibrary.dll" -o Archiv.par -p Skript.pl
z.B. (für obige Fehlermeldung)
pp -l C:\WINDOWS\system32\MSVCR71.dll -o Archiv.par -p Skript.pl
Je nachdem, welche Library fehlt (wird ja von PAR in der Fehlermeldung angegeben).
Links
http://search.cpan.org/search?query=par&mode=all
http://par.perl.org
http://renormalist.net/cgi-bin/twiki/view/PM/PAR
http://www.linux-magazin.de/Artikel/ausgabe/2004/09/perl/perl.html
http://forum.perl.de/bb/viewtopic.php?p=14306&
Erfahrungen
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff