Forum: PC Hard- und Software Kann Perl-Code in exe kompiliert werden?


von perlator (Gast)


Lesenswert?

Hallo Fachleute!

Kann ich aus einem Perl-Skript aus ausführbare Anwendung erstellen die 
ohne Interpreter läuft?

Wenn ja wie geht so etwas?

Danke
hans

von G4st (Gast)


Lesenswert?


von nochn gast (Gast)


Lesenswert?

Mensch, wieso wird solchen faulen Säuen auch noch geantwortet? Sowat 
reescht misch uff!

von perlator (Gast)


Lesenswert?

@G4st:
Vielen Dank für den Link.

@noch gast:
Behalt dein ganzes Wissen inclusive diesem Gesülze hier für Dich.
Du musst hier niemanden helfen. Grab Dich ein, lerne aber vorher 
Deutsch.

von Jens G. (jensig)


Lesenswert?

eigentlich hat "nochn gast" schon recht. In google findet man äuserst 
schnell sowas - ich z.B. einfach mal mit "perl exe", und schon isses der 
erste Link, und noch etliche mehr. Aber was solls - war schon öfters in 
der Diskussion hier ...

von .blackhat .. (blackhat-blade)


Lesenswert?

Hmm..

Google ist nicht der Weisheit letzter Schluss, insbesondere nicht bei 
komplexen Themen und sehr einseitigen Suchbegriffen.

Um ein Perlprogramm in eine Ausführbare Datei zu verpacken gibt es jede 
menge Möglichkeiten, wobei alle die mir bekannt irgendwo gravierende 
Nachteile aufweisen.

B::C

Der 'simple' Perl nach C Übersetzer. Funktioniert je nach Programm mal, 
mal nicht, eher nicht. Erzeugt C Code des Programms (also nur der .pl 
File), um (perl-) Module und (kompilierte-) Libs musst du dich selber 
Kümmern. Funktioniert, wenn überhaupt, nur bei recht simplen Programmen 
die keine XSUBs benutzen.

B::CC

Der 'fortgeschrittene' Perl nach C Übersetzer. Ist in den letzten 
Versionen halbwegs brauchbar geworden, verändert aber die Perl Semantik 
in teilweise sehr überraschenden Punkten (da Compile und Runtime Kontext 
von manchen Konstrukten geändert werden). Funktioniert bei Simplen 
Programmen recht zuverlässig, wenn man sich beim schreiben der 
Einschränkungen bewusst ist und nur Module verwendet die damit 
zusammenarbeiten (weiss man dummerweise im Voraus nur selten). 
Verarbeitet auch nur die eigentliche Programmdatei, libs, Module etc. 
sind dein Problem.

ActiveState PDK (oder so)

Im PDK wird ein Tool mitgeliefert dass dein Perlprogramm zusammen mit 
den Verwendeten Modulen, und anderen Ressourcen in einen Ausführbaren 
Container verpackt. (Ob dll's die zu den Modulen gehören mit gepackt 
werden weiss ich leider nicht). Funktioniert mit fast jedem Programm, 
hat allerdings einige Haken:

1. Kostet Geld (gibt aber eine Eval-Version)
2. Funktioniert auschliesslich mit ActivePerl (auf dem 
Entwicklungsrechner, für die Zielumgebung wird ja alles mitgeliefert)
3. Module lassen sich anscheinend nur welche verwenden die keinen 
Compiler erfordern oder als ppm von ActiveState angeboten werden. 
Selbstkompilierte Module aus'm CPAN habe ich damit nicht zum laufen 
gebracht. (Ich habe es aber auch nicht Exzessiv versucht, da ich 
alternativen (s.U.) fand)

PAR / pp

PAR ist ein Framework um Perlprogramme in leicht auszuliefernde 
Container zu verpacken. PAR ist recht komplex und bietet viele 
Möglichkeiten (ausreichend um sich mehrmals in den Fuß zu schießen). 
Unter anderem kannst du aus einem Perlprogramm eine Ausführbare Datei 
machen die sämtliche Module, Libs und den Perlinterpreter enthält. 
Funktioniert mit 95+ % der Programme, kann aber eine Menge Arbeit machen 
bis alles läuft, manche verwendete Module erkennt es nicht automatisch, 
manche Libs müssen von Hand mit dazu gepackt werden, etc. Einige 
Spezialitäten, beispielsweise per Inline::C zur Runtime kompilierte C 
Routinen laufen mit PAR überhaupt nicht, oder nur sehr widerwillig. Mit 
pp 'verexete' Programme sind eigentlich nur Ziparchive mit 
davorgeklatschtem Loader, der Sourcecode ist also ohne weiteres 
Einsehbar (lässt sich aber mehr oder weniger wirkungsvoll verhindern).



Es gibt noch ein Paar weitere Tools, welche ähnliches leisten, oder 
ähnliche Zielsetzungen haben, ich halte jedoch keine davon für 
erwähnenswert.

Egal für welche Möglichkeit man sich entscheidet, wenn das 
Ausgangsprogramm eine gewisse Komplexität aufweist wird das Verpacken, 
zumindest einmalig, eine Menge Arbeit sein.

Die meisten Chancen das es klappt hat man mit PAR/pp, allerdings in der 
Regel auch mit der meisten Arbeit verbunden.

Das Tool aus dem PDK ist out-of-the-box am schnellsten zu benutzen, 
sofern man mit den Einschränkungen leben kann und bereit ist Geld dafür 
auszugeben.

B::C und B::CC können funktionieren, die Regel ist es aber nicht. Dafür 
kann B::CC unter Umständen die Performance Laufzeit enorm steigern.

Ich persönlich habe alle schon ausprobiert, und verwende wenn es 
Sinnvoll erscheint PAR/pp.

YMMV
-blade, JAPH

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.