Forum: PC-Programmierung awka mit mingw cross-Kompilieren linux > win32


von Jan D. (keyman)


Lesenswert?

Servus Gemeinde,
ich stehe vor einem Problem welches mich ein wenig beschäftigt und ich 
habe keinen Ansprechpartner der mit hier weiterhelfen kann; aber wo, 
wenn nicht hier, wohnt das Wissen über cross-compiling.

Folgendes vorhaben:

Ich habe ein awk-Script welches eine recht große Datenmenge bearbeitet. 
Dieses funktioniert auch wie gewollt. Um dieses Script aber an Kollegen 
weiterzugeben welche nicht so firm in Scriptsprachen sind wollte ich es 
kompilieren und stieß dabei auf das awka-Projekt 
(http://awka.sourceforge.net/index.html). Dies ermöglicht eine 
Umwandlung des awk-Scripts in einen c-Code welcher dann mittels gcc 
kompiliert werden kann.

Dies hat auf meiner Ubuntu-Maschine (wenn die Libs korrekt liegen) auch 
funktioniert. Mit awka -X -f <file> entsteht also eine Programmdatei die 
macht was sie soll, direkt aus awka heraus.

Nun war mein Ziel aber solch ein Programm für Windows lauffähig zu 
machen, denn gerade da steht awk dem normalen User ja nicht so einfach 
zur Verfügung. Also beschäftigte ich mich lange mit cross-compiling aus 
meinem Ubuntu (32bit) mit mingw-w64. Es gelingt mir aber einfach nicht 
hier eine funktionieren *.exe zu erzeugen. (Ziel: Windows 32bit)
Ich muss vorweg schicken: meine Kenntnisse zum Thema cross-compiling 
sind leider nicht so größten.
Ich kann zwar mit "i686-w64-mingw32-gcc -o test.exe test.c" eine 
lauffähige *.exe erzeugen, sobald ich aber im Code die awka-Library 
hinzufüge (#include <libawka.h>, egal ob genutzt oder nicht) bekomme ich 
Compiler-Fehler:
1
$ i686-w64-mingw32-gcc -o test.exe test.c
2
In file included from test.c:2:0:
3
/usr/lib/gcc/i686-w64-mingw32/4.6/../../../../i686-w64-mingw32/include/libawka.h:37:20: fatal error: config.h: Datei oder Verzeichnis nicht gefunden
4
compilation terminated.

Die awka-Libraries (*.a und *.h) für Windows habe ich im 
/usr/i686-w64-mingw32/... abgelegt. Dies minderte die Fehler, dennoch 
stimmt hier irgendwas nicht was sich mir nicht erschließt. Ist hierfür 
irgend eine make-Umgebung erforderlich und wenn ja wie generiert man die 
richtig?

Um einen Fehler durch die cross-Umgebung auszuschließen habe ich auch 
awka für Windows versucht, hier bekomme ich aber den gleiche Fehler wenn 
ich versuche die *.exe direkt aus awka heraus zu erstellen. Daher mache 
ich wohl in der generellen händischen Nutzung des Compilers irgendwelche 
Fehler.

Es ist mir klar, dass man zusammen mit der *.exe aus mingw dann immer 
eine mingw.dll für Windows ausliefern muss. Das ist überhaupt kein 
Problem, nur vom Anwender-Nutzer zu verlangen er solle bitte awk 
installieren ist etwas zu dick aufgetragen.

Sehr gerne stelle ich alle möglichen Test-Scripte zur Verfügung, wenn 
ich damit irgendwas beitragen kann. Kann mir irgendjemand hier unter die 
Arme greifen? Wenns am Ende klappt backe ich auch gern nen Dankeskuchen 
:-)

Vielen Dank schon jetzt - schon alleine fürs Lesen!

jan

von Hank P. (hp67)


Lesenswert?

Bei aller Liebe:

1. Ich würde das, wenn überhaupt, unter Windows mit einem dort in ein 
paar Minuten installierten MinGW versuchen zu kompilieren. Das geht 
übrigens auch statisch, ohne eine DLL.

2. awk gibt es auch fertig für Windows als kleine Binary. Das würde ich 
bevorzugen.

3. Falls das nicht in Frage kommt, sollte sich ein awk-Skript auch fix 
nach Perl portieren lassen.

Leider keine direkten Antworten auf deine Fragen, aber ich bin 
Pragmatiker und halte mich nicht gerne mit sowas auf. Bitte nicht Übel 
nehmen. :-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jan Dressler schrieb:
> sobald ich aber im Code die awka-Library hinzufüge (#include
> <libawka.h>, egal ob genutzt oder nicht)

Das ist keine Library. Das ist eine Headerdatei.

Und der Fehler ist recht eindeutig: In libawka.h wird auf eine weitere 
Headerdatei namens config.h verwiesen, die der Compiler nicht finden 
kann.

> Die awka-Libraries (*.a und *.h) für Windows habe ich im 
/usr/i686-w64-mingw32/... abgelegt.

Du solltest Dir das Herumkopieren von Headerdateien abgewöhnen, das ist 
Murks.

Stattdessen solltest Du den Ort, an dem all die libawka-Dinge liegen, 
per Kommandozeilenoption des Compilers in den Include-Pfad aufnehmen.

Die Library (*.a) hingegen musst Du dem Linker als Kommandozeilenoption 
verpassen.

Beides sind Dinge, die im Makefile stattfinden. Nichts davon ist in 
irgendeiner Weise Windows- oder "Crosscompiler"-spezifisch, das ist beim 
Erzeugen nativer Linux-Binaries oder auch beim Erzeugen von Binaries für 
irgendwelche µCs exakt genau dasselbe.

von trulla (Gast)


Lesenswert?

Binaries für Windows habe ich hier gefunden:
http://gnuwin32.sourceforge.net/packages/awka.htm

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.