www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

  1 2 nächste Seite

newuser0815

Gepostet:
01.06.2009 07:28

Hilfe bei cabal , windows  
Hallo,
ich versuche verzweifelt schon 2 Tage dieses Programm in WinXP zu übersetzen.http://repo.or.cz/w/kaos.git
Leider meldet sich bdonlan schon seit einiger Zeit nicht mehr.
Wurde mit ghc vers. 6.8.3 geschrieben. In Ubuntu kein Problem da 6.8.3 verwendet wird.NUR bei Win habe ich Probleme!!
Nach runhaskell Setup.lhs build bekomme ich :
dist\build\kaos\kaos-tmp/Main.o(.text+0x11f): In function `r2tPn_info':
: undefined reference to `stg_CAF_BLACKHOLE_info'
ca. 1000 mal.
Unter 6.10.3 muss in kaos.kabal noch syb in 'Build-Depends:' doch dann bekomme ich einen Fehler in file 16 ASTToCore.hs , irgendwas mit Maybe....
Nochmal In Linux läuft alles glatt und nach der Installation kann ich kaos verwenden.
Ich tippe das mit 6.8.3 irgend eine path-variable falsch ist , aber ich weiß nicht welche!! Ver.6.10.3 hat anscheinend einige Änderungen im Syntax?

Grüße newuser0815
PS . Und auch unter wine erhalte ich die selben Ergebnisse.
hello.hs oder auch mtl.hs werden ohne zu klagen kompiliert, also ist ghc ordentlich Installiert.

Zum Seitenanfang    
 
Siracusa

Gepostet:
01.06.2009 17:44

   
Hallo,

wird dir jetzt nicht allzuviel helfen, aber bei mir kompiliert er das ohne Probleme (unter WinXP, GHC 6.8.1).

Dem GHC sollte eigentlich ein Eintrag im PATH zum bin-Ordner im GHC reichen. Bei einem Linker-Fehler würde ich darauf tippen, er findet seine GHC-Object-Dateien nicht. Sicher dass deine GHC-Installation noch vollständig in Ordnung ist? Vielleicht nochmal eine frisch heruntergeladene Version parallel installieren. Das Projekt ist schon etwas älter, also gut möglich, dass es im GHC 6.10.x nicht mehr funktioniert, da wurden einige Standard-Bibliotheken gründlich umgearbeitet. Oder vielleicht eine triviale Lösung, mal runhaskell clean versucht?


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
newuser0815

Gepostet:
01.06.2009 20:29

Herzlichen Dank  
Vielen Herzlichen Dank!
Ich Hirsch. Im Ordner waren noch Reste vom Linux-'configure', ; nach runhaskell Setup.lhs clean und dann von Anfang , ging alles glatt.
Darum mische nie Linux und Win. Kommt nur Käse raus.
Noch mal ein herzliches vergelt´s Gott.

"Das Projekt ist schon etwas älter, also gut möglich, dass es im GHC 6.10.x nicht mehr funktioniert, da wurden einige Standard-Bibliotheken gründlich umgearbeitet"
Neuschreiben?? Gibt es eine Übersicht was man wie umschreibt??(Na solange es mit 6.8.3 geht...)
Danke newuse0815
PS:Bin kräftig am haskell lernen.Smilie
Zum Seitenanfang    
 
Siracusa

Gepostet:
01.06.2009 23:17

   
Die Änderungen findest du hier: http://haskell.org/ghc/docs/6.10.1/html/users_guide/release-6-10-1.html#id2566405. Waren dann doch nicht so große Umarbeitungen, eher mehrere kleine. ^^ Dein Fehler mit dem Maybe ist wird vermutlich auf die Änderungen an den Container-Klassen zurückzuführen sein. Da am besten direkt in der Libraries-Doku nachschauen: http://www.haskell.org/ghc/docs/6.10.1/html/libraries/index.html


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
newuser0815

Gepostet:
02.06.2009 09:16

   
Hallo,
Wenn ich version 6.10.3 verwende, dann schreibe ich in kaos.cabal : Build-Depends: base <4 , (base-3.0.3.1 ) ;
Warum kann ich nicht container<0.2.0.0 verwenden??
Danke newuser0815
Zum Seitenanfang    
 
Siracusa

Gepostet:
02.06.2009 20:33

   
Hi nochmal,

also ich kenn mich mit der package-Verwaltung vom GHC nicht so detailliert aus, aber theoretisch sollte das gehen. Wenn du den "alten" Quellcode mit dem GHC 6.10.3 kompilieren willst, dann logischerweise auch mit den alten Packages. Bei container solltest du alte und neue Version parallel installieren können und dann die entsprechende beim Kompilieren auswählen. Ob zwei base-Packages mit dem gleichen Compiler verwendet werden können, da bin ich mir nicht sicher. Welchen Fehler bekommst du denn?

Zur Package-Verwaltung gibt's hier übrigens Doku: http://haskell.org/ghc/docs/6.10.1/html/users_guide/packages.html. Interessant vermutlich der Teil zu ghc-pkg.

Einfacher wäre allemal den GHC 6.8.3 zusätzlich zu installieren und mit dem zu kompilieren. ;-)


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
newuser0815

Gepostet:
06.06.2009 08:50

Danke , noch eine Frage  
Herzlichen Dank für die Antwort,

"Einfacher wäre allemal den GHC 6.8.3 zusätzlich zu installieren und mit dem zu kompilieren. ;-)"
Auf jeden Fall für den Moment!

Noch eine "Imperative Frage":(bezogen auf das kaos-Programm)

Es wird Zeile eingelesen und bei allen CString wird im Output-file "HALLO" erzeugt, auch bei "[1]" welches aber korrekt nur [1] lauten soll
Mein Gedanke war bei der Ausgabe in Emit.hs einfach eine Fallunterscheidung einzubauen etwa:
orginal :
emitConst (CString s) =s
mein Vorschlag
emitConst (CString s)
| (s)!!1=="[" = tag (init (s))
| otherwise = s
ODER eine if then else constuction; nur da bekomme ich Fehler wegen Vergleich Char mit [Char]
Ich glaube es liegt noch irgendwie beim "C" Denken...

Danke newuser0815
PS wäre es möglich , wenn in einem Text das Schlüsselword "#include" erscheint , dann den nachfolgenden String als eine Datei in die vorhandene einzufügen. Mit awk kein Problem(nur mit Win etwas schwerer)
for i in `awk '/#include/ { print $2 }' $1`
do
echo $i included
cat $i >>$TMP
Dies würde dann wahrscheinlich als neues Modul hinzugefügt werden müssen.
Zum Seitenanfang    
 
newuser0815

Gepostet:
06.06.2009 12:39

   
Hi,
die Antwort auf den Ersten Teil hab ich ,glaube ich selber, gefunden: (zumindest ist das Ergebnis korrekt! in 'output.cos')

emitConst (CString s) = if (s)!!1=='[' then tail (init(s)) else s

Am Zweiten (include) bin ich noch dran , Tipps willkommen.

Gruß newuser0815
Zum Seitenanfang    
 
Siracusa

Gepostet:
06.06.2009 20:26

   
Hi,

> if (s)!!1=='[' then tail (init(s)) else s
Ist denn sichergestellt, das s immer mindestens zwei Zeichen enthält? Sonst gibt's beim !!1 u.U. einen Laufzeitfehler.

> wäre es möglich , wenn in einem Text das Schlüsselword "#include" erscheint , dann den nachfolgenden String als eine Datei in die vorhandene einzufügen.
Ja, durchaus möglich. Willst du denn direkt in die Datei schreiben (als eine Art Preprocessing), oder nur den Input-String beim Parsen verändern? Im ersten Fall könnte man die Source-Datei zeilenweise durchgehen und die aktuelle Zeile in eine zweite Datei schreiben. Dabei mit Text.Regex.matchRegex immer prüfen, ob ein include vorliegt, und falls ja, die Zieldatei lesen und diese in die zweite Datei schreiben. Passende Funktionen für den Umgang mit Dateien findest du in System.IO.

Für Fall zwei einfach ein Text.Regex.subRegex auf dem Eingabestring machen. Oder direkt im Syntaxbaum ersetzen, falls das in dem Programm funktioniert.


Vielel Grüße,

Siracusa
Zum Seitenanfang    
 
newuser0815

Gepostet:
06.06.2009 20:43

   
Hallo,
>Ist denn sichergestellt, das s immer mindestens zwei Zeichen enthält? Sonst gibt's beim !!1 u.U. einen Laufzeitfehler.
Hm, richtig aber dann ist es auch in der zu kompilierenden Datei ein Fehler, da die Funktion so aus sehen muß! :
....newbutton(3, "ds gui", 14, 77, 331, 0, 0 ,"[]", 2000, 1); oder ....newbutton(3, "ds gui", 14, 77, 331, 0, 0 ,"[3]", 2000, 1);

>(als eine Art Preprocessing)
So etwas habe ich im Sinn; Preprocess(Orginaldatei) => temp , welche dann im eigentlichen Kompiler bearbeitet wird.
Habe die gefunden:http://www.haskell.org/haskellwiki/Haskell_IO_for_Imperative_Programmers unter 5

readWithIncludes :: String -> IO [String]
readWithIncludes f = do
s <- readFile f
ss <- mapM expandIncludes (lines s)
return (concat ss)

expandIncludes :: String -> IO [String]
expandIncludes s =
if isInclude s -- kann ich 'isInclude' mit "#include" ersetzen ??
then
readWithIncludes (includeFile s)
else
return [s]
Bin noch am probieren,
Gruß newuser0815
Zum Seitenanfang    
 

  1 2 nächste Seite