Thread Parrot::Interpreter Win32 ActivePerl 5.8.8 (7 answers)
Opened by MatthiasW at 2008-09-22 19:31

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"'

View full thread Parrot::Interpreter Win32 ActivePerl 5.8.8