Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12530[/thread]

Parrot::Interpreter Win32 ActivePerl 5.8.8

Leser: 1


<< >> 8 Einträge, 1 Seite
MatthiasW
 2008-09-22 19:31
#114847 #114847
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich würde gerne in Perl PIR Code laden und die PIR Funktionen ansprechen, mit Parametern und Rückgabewerten.
Dazu habe ich mich mal im CPAN umgesehen und 2 Module gefunden, die mir helfen könnten:
[ul]
[li]CPAN:Inline::Parrot[/li]
[li]CPAN:Parrot::Interpreter[/li]
[/ul]
Inline::Parrot konnte ich nur mit force über cpan installieren, da alle Tests bis auf 2 fehlschlagen, weil parrot anscheinend Probleme mit der von Inline::Parrot mitgelieferten Datei parrot-interp.pir hat, die die Kommunikation zwischen parrot und perl bereitstellt.

Diese Probleme bestehen natürlich nach dem Installieren immer noch.

Parrot::Interpreter kann ich gar nicht installieren, da kein Makefile erstellt wird. Hier mal ein Auszug der cpan-Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
CPAN: File::HomeDir loaded ok (v0.58)
CPAN: Storable loaded ok (v2.16)
Going to read C:\Perl\cpan\Metadata
Database was generated on Sun, 21 Sep 2008 08:03:21 GMT
CPAN: YAML loaded ok (v0.66)
Going to read C:\Perl/cpan/build/
DONE
Found no old builds, restored the state of none
Running install for module 'Parrot::Interpreter'
Running make for P/PM/PMIC/parrot-0.7.1.tar.gz
CPAN: Digest::SHA loaded ok (v5.44)
CPAN: Compress::Zlib loaded ok (v1.4201)
Checksum for C:\Perl\cpan\sources\authors\id\P\PM\PMIC\parrot-0.7.1.tar.gz ok
[...]
CPAN: File::Temp loaded ok (v0.18)

CPAN.pm: Going to build P/PM/PMIC/parrot-0.7.1.tar.gz

Parrot Version 0.7.1 Configure 2.0
Copyright (C) 2001-2008, The Perl Foundation.

Hello, I'm Configure. My job is to poke and prod your system to figure out
how to build Parrot. The process is completely automated, unless you passed in
the `--ask' flag on the command line, in which case I'll prompt you for a few
pieces of info.

Since you're running this program, you obviously have Perl 5--I'll be pulling
some defaults from its configuration.

init::manifest - Check MANIFEST.....................................done.
init::defaults - Set Configure's default values.....................done.
init::install - Set up installation paths..........................done.
init::miniparrot - Tweak settings for miniparrot...................skipped.
init::hints - Load platform and local hints files................done.
init::headers - Find header files distributed with Parrot..........done.
inter::progs - Determine what C compiler and linker to use...Compilation failed with 'cl'
PMIC/parrot-0.7.1.tar.gz
C:\Perl\bin\perl.exe Makefile.PL -- NO Makefile created
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install

Bei der Suche nach Lösungen bin ich auf einen Patch(http://markmail.org/message/wsbq4tdh24rs54g7) von Francois Perrad gestoßen, nur leider weiß ich nicht was er mit dem PARROT_API Qualifier meint.

Ich würde mich über eure Hilfe freuen wenigstens eines der beiden genannten Module(am Besten Nr. 2) zum Laufen zu bringen.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
moritz
 2008-09-22 20:42
#114850 #114850
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Soweit ich weiss funktioniert parrot+activestate nur mit dem msvc (oder msvc++, oder wie das dingens heisst) C compiler - benutzt du den?
MatthiasW
 2008-09-22 21:56
#114852 #114852
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Danke für den Tipp, ich werds gleich mal mit dem 6.0 ausprobieren.
edit: Ja ich benutze ihn, steht ja auch in der cpan-Ausgabe: compilation failed with cl

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
MatthiasW
 2008-09-23 23:58
#114888 #114888
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Ich hatte gerade Zeit es nochmals zu probieren, diesmal mit gcc und mingw32-make.
Und es hat funktioniert, naja jedenfalls konnte ich parrot vom CPAN installieren, aber viel weiter hat mich das nicht gebracht, Parrot::Interpreter wurde leider nicht installiert..

Kann mir jemand sagen, was ich jetzt noch tun muss um Parrot::Interpreter verwenden zu können?

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
moritz
 2008-09-24 00:51
#114894 #114894
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Wenn du nicht weiterkommst kannst du parrot-dev@lists.parrot.org fragen, vielleicht kann dir da jemand helfen. Da es Teil der parrot-Distribution auf CPAN ist, sollten die das eigentlich wissen.
MatthiasW
 2008-09-24 20:10
#114905 #114905
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Bevor ich die Mailingliste bemühe, möchte ich es erst noch ein Weilchen selbst probieren.
Um nachzuvollziehen wo das Problem genau liegt versuche ich mich grad an XS.

Ich habe eine Datei 't_hello.h' erstellt:
[cpp]#ifndef __HELLO_H__
#define __HELLO_H__

char* ret_true()
{
return "true";
} // ret_true

#endif[/cpp]
Weiterhin eine Datei 'hello.xs':
Code: (dl )
1
2
3
4
5
6
7
8
9
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "hello.h"

MODULE = HELLO PACKAGE = HELLO

char*
ret_true()

Aus diesen beiden Dateien habe ich folgendermaßen eine Objektdatei hello.o erstellet:
1. xsubpp -noversioncheck -nooptimize hello.xs > hello.c
2. gcc -IC:\Perl\lib\CORE -c hello.c

Diese Datei('hello.o') habe ich dann in den Ordner ./auto/HELLO gepackt.
Dann habe ich folgende Datei('HELLO.pm') erstellt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
package HELLO;

require Exporter;
require DynaLoader;
@ISA = qw(Exporter DynaLoader);
@EXPORT = qw(ret_true);

bootstrap HELLO;

1;

Und ein Testskript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;

use HELLO;

print "ret_true() from HELLO returns: ", ret_true(), "\n";

Das ganze funktioniert leider noch nicht, da DynaLoader eine DLL erwartet, ich jedoch nur die Objektdatei vorliegen habe.

Kann ich DynaLoader irgendwie beibringen die Objektdatei zu laden?
Ansonsten: Mit welchen Bibliotheken müsste ich die Objektdatei zusammenlinken um eine funktionierende DLL zu bekommen?

Was Perl-Embed angeht, habe ich schon recht viel mit dem Makefile.PL herumgespielt, leider ohne großen Erfolg, im Moment bekomme ich ettliche Fehlermeldungen vom cl. Ich werde es aber nochmal per Hand mit dem gcc probieren.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
murphy
 2008-09-24 21:17
#114906 #114906
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
MatthiasW+2008-09-24 18:10:50--
[...]
Kann ich DynaLoader irgendwie beibringen die Objektdatei zu laden?


Wohl kaum. Objektdateien sind nicht reloziert und enthalten keinerlei Referenzen auf die Bibliotheken, die geladen werden müssen, um sie zu benutzen – wenn Du so etwas in Dein Programm laden möchtest, musst Du Dir dafür einen eigenen dynamischen Linker schreiben, der weiss, was zu tun ist.

Quote
Ansonsten: Mit welchen Bibliotheken müsste ich die Objektdatei zusammenlinken um eine funktionierende DLL zu bekommen?
[...]


Nur mit der Laufzeitbibliothek von Perl (und eventuell deren Abhängigkeiten). Wenn Du mit den Modulen MakeMaker oder Build arbeitest sollte das auch eigentlich automatisch passieren.

Wenn Du es unbedingt von Hand linken willst, dann dürfte das Kommando irgendwie so ähnlich aussehen:
Code: (dl )
gcc -fPIC -shared hello.o -o hello.dll -L/pfad/zur/perl/bibliothek -lperl


Es ist oftmals wichtig, dass Du beim Linken das gleiche Flag für positionsunabhängigen Code (-fpic und/oder -fPIC) angibst wie beim Kompilieren.
When C++ is your hammer, every problem looks like your thumb.
MatthiasW
 2008-10-01 14:43
#115063 #115063
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
@murphy, Danke, das ret_true() Beispiel hat super funktioniert!

Bei Parrot::Embed bekomme ich beim kompilieren der Embed.c sehr viele warning: ... redefined und warning: this is the location of the previous definition Warnungen.
Ich habs trotzdem mal mit libparrot.lib, perl58.lib und ws2_32.lib zusammengelinkt.
Anscheinend fehlt in der Embed.dll nachdem linken immer boot_Parrot__Embed, sodass ich es nicht verwenden kann. Ich denke das hängt mit den Warnungen beim kompilieren zusammen, vielleicht kann mir da ja noch jemand bei helfen.

Hier die gcc-Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
C:\parrot-0.7.1\ext\Parrot-Embed>gcc -IC:\Perl\lib\CORE -IC:\parrot-0.7.1\include -c Embed.c
In file included from C:/Perl/lib/CORE/perl.h:38,
from Embed.xs:6:
C:/Perl/lib/CORE/config.h:3810:1: warning: "_" redefined
In file included from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/parrot.h:260:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/win32thread.h:4,
from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32.h:64:1: warning: "CONTEXT" redefined
In file included from C:/parrot-0.7.1/include/parrot/global_setup.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:275,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/interpreter.h:279:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/win32thread.h:4,
from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32.h:237:1: warning: "isnan" redefined
In file included from config/gen/platform/generic/math.h:14,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/math.h:380:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:17:1: warning: "MUTEX_INIT" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:32:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:20:1: warning: "MUTEX_DESTROY" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:33:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:55:1: warning: "COND_INIT" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:35:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:63:1: warning: "COND_SIGNAL" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:75:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:70:1: warning: "COND_BROADCAST" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:81:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:77:1: warning: "COND_WAIT" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:46:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:91:1: warning: "COND_DESTROY" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:41:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:98:1: warning: "DETACH" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:94:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:195:1: warning: "JOIN" redefined
In file included from config/gen/platform/win32/threads.h:9,
from C:/parrot-0.7.1/include/parrot/parrot.h:273,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thr_windows.h:87:1: warning: this is the location of the previous definition
In file included from C:/Perl/lib/CORE/perl.h:2611,
from Embed.xs:6:
C:/Perl/lib/CORE/win32thread.h:204:1: warning: "YIELD" redefined
In file included from C:/parrot-0.7.1/include/parrot/pmc.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:296,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/thread.h:65:1: warning: this is the location of the previous definition
In file included from Embed.xs:6:
C:/Perl/lib/CORE/perl.h:2990:1: warning: "__attribute__malloc__" redefined
In file included from C:/parrot-0.7.1/include/parrot/register.h:17,
from C:/parrot-0.7.1/include/parrot/interpreter.h:140,
from C:/parrot-0.7.1/include/parrot/global_setup.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:275,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/compiler.h:81:1: warning: this is the location of the previous definition
In file included from Embed.xs:6:
C:/Perl/lib/CORE/perl.h:2993:1: warning: "__attribute__nonnull__" redefined
In file included from C:/parrot-0.7.1/include/parrot/register.h:17,
from C:/parrot-0.7.1/include/parrot/interpreter.h:140,
from C:/parrot-0.7.1/include/parrot/global_setup.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:275,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/compiler.h:84:1: warning: this is the location of the previous definition
In file included from Embed.xs:6:
C:/Perl/lib/CORE/perl.h:2996:1: warning: "__attribute__noreturn__" redefined
In file included from C:/parrot-0.7.1/include/parrot/register.h:17,
from C:/parrot-0.7.1/include/parrot/interpreter.h:140,
from C:/parrot-0.7.1/include/parrot/global_setup.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:275,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/compiler.h:87:1: warning: this is the location of the previous definition
In file included from Embed.xs:6:
C:/Perl/lib/CORE/perl.h:2999:1: warning: "__attribute__pure__" redefined
In file included from C:/parrot-0.7.1/include/parrot/register.h:17,
from C:/parrot-0.7.1/include/parrot/interpreter.h:140,
from C:/parrot-0.7.1/include/parrot/global_setup.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:275,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/compiler.h:93:1: warning: this is the location of the previous definition
In file included from Embed.xs:6:
C:/Perl/lib/CORE/perl.h:3002:1: warning: "__attribute__unused__" redefined
In file included from C:/parrot-0.7.1/include/parrot/register.h:17,
from C:/parrot-0.7.1/include/parrot/interpreter.h:140,
from C:/parrot-0.7.1/include/parrot/global_setup.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:275,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/compiler.h:96:1: warning: this is the location of the previous definition
In file included from Embed.xs:6:
C:/Perl/lib/CORE/perl.h:3005:1: warning: "__attribute__warn_unused_result__" redefined
In file included from C:/parrot-0.7.1/include/parrot/register.h:17,
from C:/parrot-0.7.1/include/parrot/interpreter.h:140,
from C:/parrot-0.7.1/include/parrot/global_setup.h:18,
from C:/parrot-0.7.1/include/parrot/parrot.h:275,
from Embed.xs:2:
C:/parrot-0.7.1/include/parrot/compiler.h:99:1: warning: this is the location of the previous definition

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< >> 8 Einträge, 1 Seite



View all threads created 2008-09-22 19:31.