develooper Front page | perl.perl5.build | Postings from January 2004

Build problems with PERL_IMPLICIT_SYS

From:
Goran Koruga
Date:
January 29, 2004 02:41
Subject:
Build problems with PERL_IMPLICIT_SYS
Message ID:
slrnc1hhle.5ec.gorank@isis.hermes.si
Hello all.

I am trying to build Perl 5.8.3 with -DPERL_IMPLICIT_SYS and it's
failing. First error is :

`sh  cflags "optimize='-O3'" miniperlmain.o`  miniperlmain.c
          CCCMD =  cc -DPERL_CORE -c -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -I/usr/local/include -DPERL_IMPLICIT_SYS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O3  -Wall
In file included from perl.h:2334,
                 from miniperlmain.c:27:
iperlsys.h:462: warning: `struct utsname' declared inside parameter list
iperlsys.h:462: warning: its scope is only this definition or declaration, which is probably not what you want.
iperlsys.h:631: warning: `struct utimbuf' declared inside parameter list
iperlsys.h:1132: parse error before `*'
iperlsys.h:1132: parse error before `SOCKET'
iperlsys.h:1133: warning: type defaults to `int' in declaration of `SOCKET'
iperlsys.h:1133: `SOCKET' declared as function returning a function
iperlsys.h:1183: `LPSocket' declared as function returning a function
iperlsys.h:1196: parse error before `LPAccept'
iperlsys.h:1196: warning: no semicolon at end of struct or union
iperlsys.h:1238: parse error before `}'
iperlsys.h:1243: field `perlSockList' has incomplete type
make: *** [miniperlmain.o] Error 1

I have fixed this by adding the following to perl.h :

#ifndef WIN32
#include <stdio.h>
typedef int SOCKET;
#endif    

This is a quick hack to get arround the problem and it seems to work (I
remember needing this same fix with Perl 5.6.1 back then).

But then it also errors when linking miniperl :

rm -f libperl.a
/usr/bin/ar rcu libperl.a perl.o  gv.o toke.o perly.o op.o pad.o regcomp.o dump.o util.o mg.o reentr.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o xsutils.o globals.o perlio.o perlapi.o numeric.o locale.o pp_pack.o pp_sort.o 
cc -L/usr/local/lib -o miniperl \
    miniperlmain.o opmini.o libperl.a -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc 
miniperlmain.o: In function `main':
miniperlmain.o(.text+0x3c): undefined reference to `perl_alloc'
libperl.a(sv.o): In function `perl_clone':
sv.o(.text+0x12053): undefined reference to `perl_clone_host'

This is happening both on Linux and AIX. Here's how I have run Configure:

./Configure -Dusethreads -Uuse5005threads -Duseithreads -Dusemultiplicity -Duselargefiles -Uusesocks -Uusemymalloc -Ubincompat5005

I have used defaults for all the questions, except for ccflags, where I
copied the suggested line and added -DPERL_IMPLICIT_SYS.

I know that PERL_IMPLICIT_SYS is supposed to go away, but we needed it
with Perl 5.6.1, otherwise interpreter kept core dumping when running it
in several threads.

Can someone please explain what to do ? I have looked at perl.c and
perl_alloc() is available only if PERL_IMPLICIT_SYS is not defined, yet
there's no such ifdef at the place where perl_alloc() is called in
miniperlmain.c. The same goes for perl_clone_host() - it's only
available for Windows and Netware, but the code in sv.c calls it.

Documentation in perlguts suggests this is only available for Windows,
but we managed to compile it for Unix too with Perl 5.6.1.

Thank you and best regards,
    Goran



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About