Front page | perl.perl5.porters |
Postings from November 2004
Re: building ByteLoader
From: Nicholas Clark
November 24, 2004 04:40
Re: building ByteLoader
Message ID: 20041124124017.GI6725@plum.flirble.org
On Wed, Nov 24, 2004 at 01:02:18PM +0200, gumbold wrote:
> It is cross-build on Linux for my mmu less system.
> Using stuff from Cross/
> miniperl built,link to perl-5.8.5 binary instead of created
> miniperl - done, DynaLoader also.
Is that text "built,link" output from something that ran? Or you're describing
the steps you took?
> Now ByteLoader telling this:
> Can't locate loadable object for module File::Glob in @INC (@INC
> contains: ../../lib ../../lib
> /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5
> /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4
> /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2
> /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0
> /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4
> /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2
> /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0
> /usr/lib/perl5/vendor_perl .) at ../../lib/ExtUtils/Command.pm line 57
> Compilation failed in require at ../../lib/ExtUtils/Command.pm line 57.
I think that that will be due to this glob() builtin:
@ARGV = map(/[$wild_regex]/o ? glob($_) : $_,@ARGV);
An explanation of the build process, and the implication:
For a real perl, the glob() builtin now calls out to the File::Glob module.
Because building the File::Glob module (and lots of the others, such as
ByteLoader) needs a perl, initially another perl, "miniperl", is built, which
doesn't have any dynamic linking, and also does glob() without an extension
module (by forking a csh()).
I don't really understand how Redvers got the cross compiling to work. But
for the normal (same platform build) initially "miniperl" is built, then
"perl" is built, then that "perl" is not used at all for the rest of the
build process. (because it expects extension modules that don't yet exist)
It's only used for "make test". And obviously, it's what gets installed.
So the error message means that the perl binary you're running to do the
cross build is the full perl ("perl"), not "miniperl" (the temporary
binary used within the build process). As I say, I don't understand the
details of how Redvers got the cross compile to work, but are you mistakenly
using or linking to a native built "perl" rather than a native built
Skipping building ByteLoader isn't going to help here, as the problem you
report is in the code used to make all extensions, not something ByteLoader