perlaix (1)
Leading comments
Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) Standard preamble: ========================================================================
NAME
perlaix - Perl version 5 on IBM AIX (UNIX) systemsDESCRIPTION
This document describes various features ofCompiling Perl 5 on AIX
For information on compilers on older versions of When compiling Perl, you must use an
Supported Compilers
Currently all versions ofIf you plan to link Perl to any module that requires thread-support, like DBD::Oracle, it is better to use the _r version of the compiler. This will not build a threaded Perl, but a thread-enabled Perl. See also ``Threaded Perl'' later on.
As of writing (2010-09) only the
The following compiler versions are currently supported by
IBM XL C and IBM XL C/C++ V8, V9, V10, V11
The
If you choose
If you choose
Perl can be compiled with either
If you decide to use gcc, make sure your installation is recent and complete, and be sure to read the Perl
Incompatibility with AIX Toolbox lib gdbm
If the Perl 5 was successfully compiled and tested on:
Perl | AIX Level | Compiler Level | w th | w/o th -------+---------------------+-------------------------+------+------- 5.12.2 |5.1 TL9 32 bit | XL C/C++ V7 | OK | OK 5.12.2 |5.1 TL9 64 bit | XL C/C++ V7 | OK | OK 5.12.2 |5.2 TL10 SP8 32 bit | XL C/C++ V8 | OK | OK 5.12.2 |5.2 TL10 SP8 32 bit | gcc 3.2.2 | OK | OK 5.12.2 |5.2 TL10 SP8 64 bit | XL C/C++ V8 | OK | OK 5.12.2 |5.3 TL8 SP8 32 bit | XL C/C++ V9 + IZ35785 | OK | OK 5.12.2 |5.3 TL8 SP8 32 bit | gcc 4.2.4 | OK | OK 5.12.2 |5.3 TL8 SP8 64 bit | XL C/C++ V9 + IZ35785 | OK | OK 5.12.2 |5.3 TL10 SP3 32 bit | XL C/C++ V11 + Apr 2010 | OK | OK 5.12.2 |5.3 TL10 SP3 64 bit | XL C/C++ V11 + Apr 2010 | OK | OK 5.12.2 |6.1 TL1 SP7 32 bit | XL C/C++ V10 | OK | OK 5.12.2 |6.1 TL1 SP7 64 bit | XL C/C++ V10 | OK | OK 5.13 |7.1 TL0 SP1 32 bit | XL C/C++ V11 + Jul 2010 | OK | OK 5.13 |7.1 TL0 SP1 64 bit | XL C/C++ V11 + Jul 2010 | OK | OK w th = with thread support w/o th = without thread support OK = tested
Successfully tested means that all ``make test'' runs finish with a result of 100%
All tests were conducted on the oldest supported
Building Dynamic Extensions on AIX
Starting from Perl 5.7.2 (and consequently 5.8.x / 5.10.x / 5.12.x)
and It is highly recommended to use the new interface.
Using Large Files with Perl
Should yield no problems.Threaded Perl
Should yield no problems with
The threaded Perl build works also on
Perl 5.12 an newer is not compatible with the
64-bit Perl
If yourIf you need more memory (larger data segment) for your Perl programs you can set:
/etc/security/limits default: (or your user) data = -1 (default is 262144 * 512 byte)
With the default setting the size is limited to 128MB. The -1 removes this limit. If the ``make test'' fails please change your /etc/security/limits as stated above.
Long doubles
There seem to be various problems in this long double implementation. If Configure detects this brokenness, it will disable the long double support. This can be overriden with explicit "-Duselongdouble" (or "-Dusemorebits", which enables both long doubles and 64 bit integers). If you decide to enable long doubles, for most of the broken things Perl has implemented workarounds, but the handling of the special values infinity and NaN remains badly broken: for example infinity plus zero results in NaN.
Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (threaded/32-bit)
With the following options you get a threaded Perl version which
passes all make tests in threaded 32-bit mode, which is the default
configuration for the Perl builds that
rm config.sh ./Configure \ -d \ -Dcc=cc_r \ -Duseshrplib \ -Dusethreads \ -Dprefix=/usr/opt/perl5_32
The -Dprefix option will install Perl in a directory parallel to the
Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (32-bit)
With the following options you get a Perl version which passes
all make tests in 32-bit mode.
rm config.sh ./Configure \ -d \ -Dcc=cc_r \ -Duseshrplib \ -Dprefix=/usr/opt/perl5_32
The -Dprefix option will install Perl in a directory parallel to the
Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (threaded/64-bit)
With the following options you get a threaded Perl version which
passes all make tests in 64-bit mode.
export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell) rm config.sh ./Configure \ -d \ -Dcc=cc_r \ -Duseshrplib \ -Dusethreads \ -Duse64bitall \ -Dprefix=/usr/opt/perl5_64
Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (64-bit)
With the following options you get a Perl version which passes all
make tests in 64-bit mode.
export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell) rm config.sh ./Configure \ -d \ -Dcc=cc_r \ -Duseshrplib \ -Duse64bitall \ -Dprefix=/usr/opt/perl5_64
The -Dprefix option will install Perl in a directory parallel to the
If you choose gcc to compile 64-bit Perl then you need to add the following option:
-Dcc='gcc -maix64'
Compiling Perl 5 on AIX 7.1.0
A regression in Compiling Perl 5 on older AIX versions up to 4.3.3
Due to the fact that When compiling Perl, you must use an
At the moment of writing,
xlC.C 3.1.4.10 or 3.6.6.0 or 4.0.2.2 or 5.0.2.9 or 6.0.0.3 vac.C 4.4.0.3 or 5.0.2.6 or 6.0.0.1
note that xlC has the
xlC.aix50.rte 5.0.2.0 or 6.0.0.3
subversions are not the same ``latest'' on all
Perl can be compiled with either
The
If you decide to use gcc, make sure your installation is recent and complete, and be sure to read the Perl
OS level
Before installing the patches to the
# oslevel 4.3.0.0 # lslpp -l | grep 'bos.rte ' bos.rte 4.3.3.75 COMMITTED Base Operating System Runtime bos.rte 4.3.2.0 COMMITTED Base Operating System Runtime #
The same might happen to
# lslpp -l | egrep "syscalls|libm" bos.adt.libm 5.1.0.25 COMMITTED Base Application Development bos.adt.syscalls 5.1.0.36 COMMITTED System Calls Application #
Building Dynamic Extensions on AIX < 5L
Note that starting from Perl 5.7.2 (and consequently 5.8.0) and
The IBM ANSI C Compiler
All defaults for Configure can be used.
If you've chosen to use vac 4, be sure to run 4.4.0.3. Older versions will turn up nasty later on. For vac 5 be sure to run at least 5.0.1.0, but vac 5.0.2.6 or up is highly recommended. Note that since
Here's a brief lead of how to upgrade the compiler to the latest level. Of course this is subject to changes. You can only upgrade versions from ftp-available updates if the first three digit groups are the same (in where you can skip intermediate unlike the patches in the developer snapshots of Perl), or to one version up where the ``base'' is available. In other words, the
vac.C.4.4.0.1 => vac.C.4.4.0.3 is OK (vac.C.4.4.0.2 not needed) xlC.C.3.1.3.3 => xlC.C.3.1.4.10 is NOT OK (xlC.C.3.1.4.0 is not available) # ftp ftp: ftp.software.ibm.com Connected to service.boulder.ibm.com. : welcome message ... Name (ftp: ftp.software.ibm.com:merijn): anonymous 331 Guest login ok, send your complete e-mail address as password. Password: ... accepted login stuff ftp> cd /aix/fixes/v4/ ftp> dir other other.ll output to local-file: other.ll? y 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. 226 Transfer complete. ftp> dir xlc xlc.ll output to local-file: xlc.ll? y 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. 226 Transfer complete. ftp> bye ... goodbye messages # ls -l *.ll -rw-rw-rw- 1 merijn system 1169432 Nov 2 17:29 other.ll -rw-rw-rw- 1 merijn system 29170 Nov 2 17:29 xlc.ll
On
# lslpp -l | fgrep 'xlC.C ' xlC.C 3.1.4.9 COMMITTED C for AIX Compiler xlC.C 3.1.4.0 COMMITTED C for AIX Compiler # grep 'xlC.C.3.1.4.*.bff' xlc.ll -rw-r--r-- 1 45776101 1 6286336 Jul 22 1996 xlC.C.3.1.4.1.bff -rw-rw-r-- 1 45776101 1 6173696 Aug 24 1998 xlC.C.3.1.4.10.bff -rw-r--r-- 1 45776101 1 6319104 Aug 14 1996 xlC.C.3.1.4.2.bff -rw-r--r-- 1 45776101 1 6316032 Oct 21 1996 xlC.C.3.1.4.3.bff -rw-r--r-- 1 45776101 1 6315008 Dec 20 1996 xlC.C.3.1.4.4.bff -rw-rw-r-- 1 45776101 1 6178816 Mar 28 1997 xlC.C.3.1.4.5.bff -rw-rw-r-- 1 45776101 1 6188032 May 22 1997 xlC.C.3.1.4.6.bff -rw-rw-r-- 1 45776101 1 6191104 Sep 5 1997 xlC.C.3.1.4.7.bff -rw-rw-r-- 1 45776101 1 6185984 Jan 13 1998 xlC.C.3.1.4.8.bff -rw-rw-r-- 1 45776101 1 6169600 May 27 1998 xlC.C.3.1.4.9.bff # wget ftp://ftp.software.ibm.com/aix/fixes/v4/xlc/xlC.C.3.1.4.10.bff #
On
# lslpp -l | grep 'vac.C ' vac.C 5.0.2.2 COMMITTED C for AIX Compiler vac.C 5.0.2.0 COMMITTED C for AIX Compiler # grep 'vac.C.5.0.2.*.bff' other.ll -rw-rw-r-- 1 45776101 1 13592576 Apr 16 2001 vac.C.5.0.2.0.bff -rw-rw-r-- 1 45776101 1 14133248 Apr 9 2002 vac.C.5.0.2.3.bff -rw-rw-r-- 1 45776101 1 14173184 May 20 2002 vac.C.5.0.2.4.bff -rw-rw-r-- 1 45776101 1 14192640 Nov 22 2002 vac.C.5.0.2.6.bff # wget ftp://ftp.software.ibm.com/aix/fixes/v4/other/vac.C.5.0.2.6.bff #
Likewise on all other
# smit install_update -> Install and Update from LATEST Available Software * INPUT device / directory for software [ vac.C.5.0.2.6.bff ] [ OK ] [ OK ]
Follow the messages ... and you're done.
If you like a more web-like approach, a good start point can be www14.software.ibm.com/webapp/download/downloadaz.jsp and click ``C for
The usenm option
If linking miniperl
cc -o miniperl ... miniperlmain.o opmini.o perl.o ... -lm -lc ...
causes error like this
ld: 0711-317 ERROR: Undefined symbol: .aintl ld: 0711-317 ERROR: Undefined symbol: .copysignl ld: 0711-317 ERROR: Undefined symbol: .syscall ld: 0711-317 ERROR: Undefined symbol: .eaccess ld: 0711-317 ERROR: Undefined symbol: .setresuid ld: 0711-317 ERROR: Undefined symbol: .setresgid ld: 0711-317 ERROR: Undefined symbol: .setproctitle ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
you could retry with
make realclean rm config.sh ./Configure -Dusenm ...
which makes Configure to use the "nm" tool when scanning for library symbols, which usually is not done in
Related to this, you probably should not use the "-r" option of Configure in
Using GNU's gcc for building Perl
Using gcc-3.x (tested with 3.0.4, 3.1, and 3.2) now works out of the box,
as do recent gcc-2.9 builds available directly from
www.ibm.com/servers/aix/products/aixos/linux
Using Large Files with Perl < 5L
Should yield no problems.Threaded Perl < 5L
Threads seem to workYou may get a warning when doing a threaded build:
"pp_sys.c", line 4640.39: 1506-280 (W) Function argument assignment between types "unsigned char*" and "const void*" is not allowed.
The exact line number may vary, but if the warning (W) comes from a line line this
hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
in the ``pp_ghostent'' function, you may ignore it safely. The warning is caused by the reentrant variant of gethostbyaddr() having a slightly different prototype than its non-reentrant variant, but the difference is not really significant here.