/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Udvikling af moduler med Inline::C
Fra : Peter Makholm


Dato : 19-02-06 20:55

Jeg skal igang med at udvikle et modul der wrapper omkring noget
C-kode. Så Inline::C ligger jo lige for. Men når jeg følger
vejledningen i Inline::C-Cookbook til punkt og prikke får jeg følgende
fejl:

iBog/tmp/p2p/perl/Math-Simple-1.23 brother$ make
make: *** No rule to make target `Simple.inl', needed by `pure_all'. Stop.
iBog/tmp/p2p/perl/Math-Simple-1.23 brother$

Nogen som det er lykkes at lave et modul med Inline::C?

--
Peter Makholm | Why does the entertainment industry wants us to
peter@makholm.net | believe that a society base on full surveillance
http://hacking.dk | is bad?
| Do they have something to hide?

 
 
Morten Guldager (19-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 19-02-06 21:12

2006-02-19 Peter Makholm wrote
> Jeg skal igang med at udvikle et modul der wrapper omkring noget
> C-kode. Så Inline::C ligger jo lige for. Men når jeg følger
> vejledningen i Inline::C-Cookbook til punkt og prikke får jeg følgende
> fejl:
>
> iBog/tmp/p2p/perl/Math-Simple-1.23 brother$ make
> make: *** No rule to make target `Simple.inl', needed by `pure_all'. Stop.
> iBog/tmp/p2p/perl/Math-Simple-1.23 brother$
>
> Nogen som det er lykkes at lave et modul med Inline::C?

Jo da, lidt kode sakset ind:

use Inline 'C';
__DATA__
__C__
#include "sys/io.h"
void C_outb (int address, int value)
{
outb(value, address);
}
int C_inb (int address)
{
return(inb(address));
}

Jeg kan godt lave dig et komplet kørbart program hvis ovenstående
ikke hjælper dig igang...?

Men umiddelbart vil jeg tro det er nok at sætte timeout til 60 og
opdatere din firmware


/Morten

Morten Guldager (20-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 20-02-06 07:23

2006-02-19 Morten Guldager wrote
> 2006-02-19 Peter Makholm wrote
>> Jeg skal igang med at udvikle et modul der wrapper omkring noget
>> C-kode. Så Inline::C ligger jo lige for. Men når jeg følger
>> vejledningen i Inline::C-Cookbook til punkt og prikke får jeg følgende
>> fejl:
>>
>> iBog/tmp/p2p/perl/Math-Simple-1.23 brother$ make
>> make: *** No rule to make target `Simple.inl', needed by `pure_all'. Stop.
>> iBog/tmp/p2p/perl/Math-Simple-1.23 brother$
>>
>> Nogen som det er lykkes at lave et modul med Inline::C?
>
> Jo da, lidt kode sakset ind:

Fik du det til at virke?

> Jeg kan godt lave dig et komplet kørbart program hvis ovenstående
> ikke hjælper dig igang...?

Følgende kan køre hos mig:

mogul@linuxine/projekter/perl> more gange*
::::::::::::::
gange.pm
::::::::::::::
package gange;

use strict;
use warnings;
use Inline 'C';

1;

__DATA__
__C__

int gange2(int x)
{
return(x * 2);
}
::::::::::::::
gange-test
::::::::::::::
#!/usr/bin/perl

use strict;
use warnings;
use lib '.';
use gange;

my $x = gange::gange2(3);
warn "x = $x\n";
mogul@linuxine/projekter/perl> ./gange-test
x = 6
mogul@linuxine/projekter/perl>


/Morten

Peter Makholm (19-02-2006)
Kommentar
Fra : Peter Makholm


Dato : 19-02-06 21:16

Morten Guldager <Morten.Guldager@gmail.com> writes:

> 2006-02-19 Peter Makholm wrote
>> Jeg skal igang med at udvikle et modul der wrapper omkring noget
>> C-kode. Så Inline::C ligger jo lige for. Men når jeg følger
>> vejledningen i Inline::C-Cookbook til punkt og prikke får jeg følgende
>> fejl:
> Jo da, lidt kode sakset ind:
>
> use Inline 'C';
> __DATA__
> __C__
> #include "sys/io.h"

Det minder på ingen måde om vejledningen i Inline::C-Cookbook til at
lave perlmoduler. Du mener altså ikke det er nødvendigt at bruge
parametrene NAME og VERSION?

--
Peter Makholm | Vi smider blade allesammen - hele tiden
peter@makholm.net | som et konstant spirende efterår
http://hacking.dk | Og hele tiden vokser nye frugter frem
| og vi finder nogen til at plukke dem
| -- Tilt, Perkussive popler

Morten Guldager (19-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 19-02-06 21:25

2006-02-19 Peter Makholm wrote
> Morten Guldager <Morten.Guldager@gmail.com> writes:
>
>> 2006-02-19 Peter Makholm wrote
>>> Jeg skal igang med at udvikle et modul der wrapper omkring noget
>>> C-kode. Så Inline::C ligger jo lige for. Men når jeg følger
>>> vejledningen i Inline::C-Cookbook til punkt og prikke får jeg følgende
>>> fejl:
>> Jo da, lidt kode sakset ind:
>>
>> use Inline 'C';
>> __DATA__
>> __C__
>> #include "sys/io.h"
>
> Det minder på ingen måde om vejledningen i Inline::C-Cookbook til at
> lave perlmoduler. Du mener altså ikke det er nødvendigt at bruge
> parametrene NAME og VERSION?

Ingen anelse. Jeg har ikke læst manualen. Jeg scorede vist bare
lidt syntax inspiration jeg fandt med Google i sin tid.
(Jeg spurgte vist nok også her i gruppen)

Ovenstående kode saksede jeg fra bunden af et perl-modul,
efter 1; linjen


/Morten

Peter Makholm (21-02-2006)
Kommentar
Fra : Peter Makholm


Dato : 21-02-06 18:29

Peter Makholm <peter@makholm.net> writes:

> iBog/tmp/p2p/perl/Math-Simple-1.23 brother$ make
> make: *** No rule to make target `Simple.inl', needed by `pure_all'. Stop.
> iBog/tmp/p2p/perl/Math-Simple-1.23 brother$
>
> Nogen som det er lykkes at lave et modul med Inline::C?

Det ser ud til at Inline::MakeMaker er skrevet til at virke sammen med
en tidligere udgave af h2xs og eller ExtUtils::MakeMaker.

Tidligere så det ud til at standarden for paker med moduler at lægge
filerne til et modul Foo.pm i følgende struktur:

Foo-1.23/
Foo-1.23/Makefile.PL
Foo-1.23/Foo.pm
Foo-1.23/Foo/
Foo-1.23/Foo/Bar.pm

Men da jeg nu kaldte h2xs for at lave et skelet til en pakke lavede
den følgende;

Foo-1.23/
Foo-1.23/Makefile.PL
Foo-1.23/lib/Foo.pm
Foo-1.23/lib/Foo/
Foo-1.23/lib/Foo/Bar.pm

Det vil sige at når Inline::MakeMaker tilføjer følgende til den
Makefile der genereres:

# Well, not quite. Inline::MakeMaker is adding this:

# --- MakeMaker inline section:

..SUFFIXES: .pm .inl

..pm.inl:
$(PERL) -Mblib -MInline=NOISY,_INSTALL_ -MFoo -e1 1.23 $(INST_ARCHLIB)

pure_all :: Foo.inl

# The End is here.

Så kan den ikke lave Simple.inl fordi ovenstående regl baserer sig på
at der ligger en Foo.pm i det katelog man kalder make fra. Så
problemet er at Inline::MakeMaker ikke er fulgt med tiden?

Desuden tror jeg ikke ovenstående vil gøre det "korrekte" når Foo::Bar
også indeholder Inline::C-sektioner. Jeg tror ikke at C-kode vil blive
oversat på installeringstidspunktet, men først af hver enkelt bruger
første gang de bruger modulet. Noget tilsvarende gør sig nok gældende
for Morten Guldagers moduler, det virker men C-kode skal oversættes af
hver enkelt bruger.

--
Peter Makholm | According to the hacker ethic, the meaning of life
peter@makholm.net | is not Friday, but it is not Sunday either
http://hacking.dk | -- Pekka Himanen

Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste