Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
2k stars 559 forks source link

Compiler desn't work on static-linked installation #52

Closed p5pRT closed 21 years ago

p5pRT commented 25 years ago

Migrated from rt.perl.org#854 (status was 'resolved')

Searchable as RT854$

p5pRT commented 25 years ago

From domo@vo.lu

[resend​: bounced at defender.perl.org wih this lot last time​: RFgen​::logg(Initial​: [12884] (/home/richard/bugs/logs/pb_19990609) /home/richard/bugs/scripts/tm_mailproc.pl set) can't open today's log (/home/richard/bugs/logs/pb_19990609)! Permission denied at /home/richard/site_perl/RFgen.pm line 193\, \ chunk 126. 554 "|/home/richard/bugs/scripts/tm_mailproc.pl"... unknown mailer error 13 ]

When I attempt to use perlcc to compile any Perl program\, the diagnostic output includes many line-pairs of the type

No definition for sub Fcntl​::F_DUPFD No definition for sub Fcntl​::F_DUPFD (unable to autoload)

Further\, if I attempt to compile a program that uses some module with an XS component (for example\, Socket)\, the output includes more warnings relating to that module​:

No definition for sub Socket​::MSG_PROXY No definition for sub Socket​::MSG_PROXY (unable to autoload)

and so on.

On reaching the link stage\, ld complains

/tmp/cc0004921.o(.rw+0xcf70)​:t.p.c​: undefined reference to `XS_Fcntl_constant'

and maybe

t2.p.o(.rw+0x12ade)​:t2.p.c​: undefined reference to `XS_Socket_pack_sockaddr_in'

and so on\, and produces no executable.

A hacky way round this is to rerun the cc command line produced by perlcc\, but adding the relevant module library names (such as /usr/local/lib/perl5/5.00557/powerpc-machten/auto/Fcntl/Fcntl.a) after -lperl. This produces working output.

Looking at B/C.pm\, I see the warnings are coming from and try_autoload() and B​::CV​::save(). But I don't know where to start in persuading these functions to add the relevant static library to the cc command line (if it hasn't already been added) on encountering an external function instead of doing whatever it is that they do now in order to get a dynamic library to satisfy the reference. (Or I suppose you could just add all installed module libraries unconditionally\, as makemaker does.)

Perl Info ``` Site configuration information for perl 5.00557: Configured by domo at Sat May 29 19:17:27 WET DST 1999. Summary of my perl5 (revision 5.0 version 5 subversion 57) configuration: Platform: osname=machten, osvers=4.1.1, archname=powerpc-machten uname='machten ppp1 4 1.1 powerpc ' config_args='-des' hint=recommended, useposix=true, d_sigaction=define usethreads=undef useperlio=undef d_sfio=undef use64bits=undef usemultiplicity=undef Compiler: cc='cc', optimize='-O2 -fomit-frame-pointer', gccversion=2.8.1 cppflags='-DNOTDEF_MACHTEN -DREG_INFTY=2047' ccflags ='-DNOTDEF_MACHTEN -DREG_INFTY=2047' stdchar='char', d_stdstdio=undef, usevfork=true intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8 alignbytes=8, usemymalloc=y, prototype=define Linker and Libraries: ld='ld', ldflags =' -Xlstack=1048576 -L/usr/local/lib' libpth=/usr/local/lib /usr/lib libs=-lndbm -lgdbm -ldb -ldl -lm -lc libc=/usr/lib/libc.a, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_none.xs, dlext=none, d_dlsymun=undef, ccdlflags='' cccdlflags='', lddlflags='' Locally applied patches: [eval patch from "Trying out the compiler" "Vishal Bhatia" to p5p, Fri, 28 May 1999 02:30:50 -0700] @INC for perl 5.00557: /usr/local/lib/perl5/5.00557/powerpc-machten /usr/local/lib/perl5/5.00557 /usr/local/lib/perl5/site_perl/5.00557/powerpc-machten /usr/local/lib/perl5/site_perl/5.00557 . Environment for perl 5.00557: HOME=/home/domo LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH=/usr/lib LOGDIR (unset) PATH=/sbin:/usr/sbin:/home/domo/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11/bin:/usr/libexec PERL_BADLANG (unset) SHELL=/bin/bash -- Dominic Dunlop ```
p5pRT commented 24 years ago

From [Unknown Contact. See original ticket]

Anyone else seen a duplicate of this problem? I'm building a static installation to test.

Nat

When I attempt to use perlcc to compile any Perl program\, the diagnostic output includes many line-pairs of the type

No definition for sub Fcntl​::F_DUPFD No definition for sub Fcntl​::F_DUPFD (unable to autoload)

Further\, if I attempt to compile a program that uses some module with an XS component (for example\, Socket)\, the output includes more warnings relating to that module​:

No definition for sub Socket​::MSG_PROXY No definition for sub Socket​::MSG_PROXY (unable to autoload)

and so on.

p5pRT commented 24 years ago

From [Unknown Contact. See original ticket]

At 21​:55 -0700 2000-03-20\, Nathan Torkington wrote​:

When I attempt to use perlcc to compile any Perl program\, the diagnostic output includes many line-pairs of the type

No definition for sub Fcntl​::F_DUPFD No definition for sub Fcntl​::F_DUPFD (unable to autoload)

Anyone else seen a duplicate of this problem? I'm building a static installation to test.

Yes\, I see that too. (Static build of RC2 for MachTen 4.1.4.) Byte code compile works\, FWIW. No time to investigate just now. -- Dominic Dunlop

p5pRT commented 24 years ago

From [Unknown Contact. See original ticket]

This ticket\, against 5.005_57\, can be closed​: bleadperl perlcc now des\, er does\, work on MachTen\, a statically-linked system. (Doesn't on 5.6.0\, however -- but 5.6.0 perlcc's pretty broken in general I believe.)