aibmo: und (CGI): Probleme mit Apache und Mimetex

Hallo!
Ich habe für Tests lokal einen Apache Webserver unter Windows laufen. Jetzt will ich auch ein cgi-Skript benutzen, also habe ich mir den Perl-Interpreter von Activestate heruntergeladen und meine httpd.conf-Datei entsprechend dem Apache-Howto angepasst. Es scheint auch zu klappen, zumindest kann ich folgendes Programm

#!g:/wamp/perl/bin/perl
print "Content-type: text/plain\n\n";
print "Hello World" ;

über http://localhost/cgi-bin/test.pl ausführen.

Eigentlich will ich in einem Projekt Latex-Formeln mit Mimetex (http://www.forkosh.com/mimetex.html) anzeigen. Weil ich selbst keinen C-Compiler habe, hat mir das schnell ein Freund unter Linux die entsprechende cgi-Datei erstellt. Rufe ich diese cgi-Datei nun auf, bekomme ich im Apache-Logfile folgenden Fehler angezeigt:

G:/wamp/Apache2/cgi-bin/mimetex.cgi is not executable; ensure interpreted scripts have "#!" first line
[Thu May 04 11:36:16 2006] [error] [client 127.0.0.1] (9)Bad file descriptor: don't know how to spawn child process: G:/wamp/Apache2/cgi-bin/mimetex.cgi

Klar, der kompilierten cgi-Datei steht nicht in der ersten Zeile der Pfad zum Perl-Interpreter. Aber selbst wenn ich in der Kommandozeile
...\perl\bin\perl.exe mimetex.cgi
aufrufe, bekomme ich die Fehlermeldung
Unrecognized character \x7F at mimetex.cgi line 1.

Hab ich hier was falsch verstanden und brauche für cgi-Dateien einen anderen Interpreter? Oder versteht Windows keine unter Linux kompilierten cgi-Dateien?
Bin sehr dankbar für jeden Tipp!
Viele Grüße
aibmo

  1. Hallo,

    Mimetex ist IMHO in C geschrieben und bedarf keines Interpreters und auch keiner Shebang. Das Binär sollte sich direkt ausführen lassen.

    Gruß aus Berlin!
    eddi

    1. Mimetex ist IMHO in C geschrieben und bedarf keines Interpreters und auch keiner Shebang. Das Binär sollte sich direkt ausführen lassen.

      Hallo Eddi!
      Ich hab mich da an der Anleitung von Mimetex orientiert...

      To compile and install mimeTeX
             * unzip mimetex.zip in any convenient working directory
             * to produce an executable that emits anti-aliased
               gif images (recommended)
                    cc -DAA mimetex.c gifsave.c -lm -o mimetex.cgi
             * mv mimetex.cgi  to your server's cgi-bin/ directory

      Die cgi-Datei hat unter Linux sogar geklappt (Linux-Shell: "mimetex.cgi?x^2") und eine per Ascii ein X-Quadrat dargestellt. Das ist auch der Test, der in der Readme von Mimetex genannt wird. Liegt's dann doch am Windows-Apache?
      Viele Grüße
      aibmo

      1. Re:

        Da habe ich so ein ganz leise Vermutung. Hat Dein Bekanner denn für Windows ein Binär erstellt (oder doch für Linux)?

        Gruß aus Berlin!
        eddi

        1. Aha, ich verstehe es. Vielen Dank für eure Erklärungen, jetzt bin ich wieder mal etwas schlauer.
          Viele Grüße!
          aibmo :)

  2. Moin!

    G:/wamp/Apache2/cgi-bin/mimetex.cgi is not executable; ensure interpreted scripts have "#!" first line

    Die CGI-Datei ist nicht von sich aus "ausführbar" deklariert und läuft offensichtlich durch den Perl-Interpreter. Dieser aber erwartet aber Perl-Quellcode und offenbar zwingend auch die Shebang-Zeile als erste Zeile der Datei.

    Klar, der kompilierten cgi-Datei steht nicht in der ersten Zeile der Pfad zum Perl-Interpreter. Aber selbst wenn ich in der Kommandozeile
    ...\perl\bin\perl.exe mimetex.cgi
    aufrufe, bekomme ich die Fehlermeldung
    Unrecognized character \x7F at mimetex.cgi line 1.

    Weil das CGI ein Linux-Programm ist, was alleine ausgeführt werden muß.

    Hab ich hier was falsch verstanden und brauche für cgi-Dateien einen anderen Interpreter?

    Du brauchst für Perl-Skripte den Perl-Interpreter. Für kompilierte Programme (deren Dateiendung unter Linux vollkommen egal ist, da kommt es auf das gesetzte "Execute-Flag" der Datei an, um anzuzeigen, dass das ein ausführbares Programm ist - unter Windows aber hängt es von der Dateiendung ab, die muß ".exe", ".com", ".dll" oder eine der diversen anderen Programmdateiendungen sein) ist KEIN Interpreter notwendig.

    Oder versteht Windows keine unter Linux kompilierten cgi-Dateien?

    Natürlich nicht. Windows läuft zwar auf dem gleichen Prozessor und kennt daher die verwendeten Maschinensprachebefehle, aber kein Programm funktioniert ohne Aufrufe des Betriebssystems - und Linux hat ganz andere Aufrufe, als Windows. Du benötigst zwingend ein für Windows kompiliertes Programm.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!