1PERLAIX(1)             Perl Programmers Reference Guide             PERLAIX(1)
2
3
4

NAME

6       perlaix - Perl version 5 on IBM AIX (UNIX) systems
7

DESCRIPTION

9       This document describes various features of IBM's UNIX operating system
10       AIX that will affect how Perl version 5 (hereafter just Perl) is
11       compiled and/or runs.
12
13   Compiling Perl 5 on AIX
14       For information on compilers on older versions of AIX, see "Compiling
15       Perl 5 on older AIX versions up to 4.3.3".
16
17       When compiling Perl, you must use an ANSI C compiler. AIX does not ship
18       an ANSI compliant C compiler with AIX by default, but binary builds of
19       gcc for AIX are widely available. A version of gcc is also included in
20       the AIX Toolbox which is shipped with AIX.
21
22   Supported Compilers
23       Currently all versions of IBM's "xlc", "xlc_r", "cc", "cc_r" or "vac"
24       ANSI/C compiler will work for building Perl if that compiler works on
25       your system.
26
27       If you plan to link Perl to any module that requires thread-support,
28       like DBD::Oracle, it is better to use the _r version of the compiler.
29       This will not build a threaded Perl, but a thread-enabled Perl. See
30       also "Threaded Perl" later on.
31
32       As of writing (2010-09) only the IBM XL C for AIX or IBM XL C/C++ for
33       AIX compiler is supported by IBM on AIX 5L/6.1/7.1.
34
35       The following compiler versions are currently supported by IBM:
36
37           IBM XL C and IBM XL C/C++ V8, V9, V10, V11
38
39       The XL C for AIX is integrated in the XL C/C++ for AIX compiler and
40       therefore also supported.
41
42       If you choose XL C/C++ V9 you need APAR IZ35785 installed otherwise the
43       integrated SDBM_File do not compile correctly due to an optimization
44       bug. You can circumvent this problem by adding -qipa to the
45       optimization flags (-Doptimize='-O -qipa').  The PTF for APAR IZ35785
46       which solves this problem is available from IBM (April 2009 PTF for XL
47       C/C++ Enterprise Edition for AIX, V9.0).
48
49       If you choose XL C/C++ V11 you need the April 2010 PTF (or newer)
50       installed otherwise you will not get a working Perl version.
51
52       Perl can be compiled with either IBM's ANSI C compiler or with gcc.
53       The former is recommended, as not only it can compile Perl with no
54       difficulty, but also can take advantage of features listed later that
55       require the use of IBM compiler-specific command-line flags.
56
57       If you decide to use gcc, make sure your installation is recent and
58       complete, and be sure to read the Perl INSTALL file for more gcc-
59       specific details. Please report any hoops you had to jump through to
60       the development team.
61
62   Incompatibility with AIX Toolbox lib gdbm
63       If the AIX Toolbox version of lib gdbm < 1.8.3-5 is installed on your
64       system then Perl will not work. This library contains the header files
65       /opt/freeware/include/gdbm/dbm.h|ndbm.h which conflict with the AIX
66       system versions. The lib gdbm will be automatically removed from the
67       wanted libraries if the presence of one of these two header files is
68       detected. If you want to build Perl with GDBM support then please
69       install at least gdbm-devel-1.8.3-5 (or higher).
70
71   Perl 5 was successfully compiled and tested on:
72        Perl   | AIX Level           | Compiler Level          | w th | w/o th
73        -------+---------------------+-------------------------+------+-------
74        5.12.2 |5.1 TL9 32 bit       | XL C/C++ V7             | OK   | OK
75        5.12.2 |5.1 TL9 64 bit       | XL C/C++ V7             | OK   | OK
76        5.12.2 |5.2 TL10 SP8 32 bit  | XL C/C++ V8             | OK   | OK
77        5.12.2 |5.2 TL10 SP8 32 bit  | gcc 3.2.2               | OK   | OK
78        5.12.2 |5.2 TL10 SP8 64 bit  | XL C/C++ V8             | OK   | OK
79        5.12.2 |5.3 TL8 SP8 32 bit   | XL C/C++ V9 + IZ35785   | OK   | OK
80        5.12.2 |5.3 TL8 SP8 32 bit   | gcc 4.2.4               | OK   | OK
81        5.12.2 |5.3 TL8 SP8 64 bit   | XL C/C++ V9 + IZ35785   | OK   | OK
82        5.12.2 |5.3 TL10 SP3 32 bit  | XL C/C++ V11 + Apr 2010 | OK   | OK
83        5.12.2 |5.3 TL10 SP3 64 bit  | XL C/C++ V11 + Apr 2010 | OK   | OK
84        5.12.2 |6.1 TL1 SP7 32 bit   | XL C/C++ V10            | OK   | OK
85        5.12.2 |6.1 TL1 SP7 64 bit   | XL C/C++ V10            | OK   | OK
86        5.13   |7.1 TL0 SP1 32 bit   | XL C/C++ V11 + Jul 2010 | OK   | OK
87        5.13   |7.1 TL0 SP1 64 bit   | XL C/C++ V11 + Jul 2010 | OK   | OK
88
89        w th   = with thread support
90        w/o th = without thread support
91        OK     = tested
92
93       Successfully tested means that all "make test" runs finish with a
94       result of 100% OK. All tests were conducted with -Duseshrplib set.
95
96       All tests were conducted on the oldest supported AIX technology level
97       with the latest support package applied. If the tested AIX version is
98       out of support (AIX 4.3.3, 5.1, 5.2) then the last available support
99       level was used.
100
101   Building Dynamic Extensions on AIX
102       Starting from Perl 5.7.2 (and consequently 5.8.x / 5.10.x / 5.12.x) and
103       AIX 4.3 or newer Perl uses the AIX native dynamic loading interface in
104       the so called runtime linking mode instead of the emulated interface
105       that was used in Perl releases 5.6.1 and earlier or, for AIX releases
106       4.2 and earlier. This change does break backward compatibility with
107       compiled modules from earlier Perl releases. The change was made to
108       make Perl more compliant with other applications like Apache/mod_perl
109       which are using the AIX native interface. This change also enables the
110       use of C++ code with static constructors and destructors in Perl
111       extensions, which was not possible using the emulated interface.
112
113       It is highly recommended to use the new interface.
114
115   Using Large Files with Perl
116       Should yield no problems.
117
118   Threaded Perl
119       Should yield no problems with AIX 5.1 / 5.2 / 5.3 / 6.1 / 7.1.
120
121       IBM uses the AIX system Perl (V5.6.0 on AIX 5.1 and V5.8.2 on AIX 5.2 /
122       5.3 and 6.1; V5.8.8 on AIX 5.3 TL11 and AIX 6.1 TL4; V5.10.1 on AIX
123       7.1) for some AIX system scripts. If you switch the links in /usr/bin
124       from the AIX system Perl (/usr/opt/perl5) to the newly build Perl then
125       you get the same features as with the IBM AIX system Perl if the
126       threaded options are used.
127
128       The threaded Perl build works also on AIX 5.1 but the IBM Perl build
129       (Perl v5.6.0) is not threaded on AIX 5.1.
130
131       Perl 5.12 an newer is not compatible with the IBM fileset perl.libext.
132
133   64-bit Perl
134       If your AIX system is installed with 64-bit support, you can expect
135       64-bit configurations to work. If you want to use 64-bit Perl on AIX
136       6.1 you need an APAR for a libc.a bug which affects (n)dbm_XXX
137       functions.  The APAR number for this problem is IZ39077.
138
139       If you need more memory (larger data segment) for your Perl programs
140       you can set:
141
142           /etc/security/limits
143           default:                    (or your user)
144               data = -1               (default is 262144 * 512 byte)
145
146       With the default setting the size is limited to 128MB.  The -1 removes
147       this limit. If the "make test" fails please change your
148       /etc/security/limits as stated above.
149
150   Long doubles
151       IBM calls its implementation of long doubles 128-bit, but it is not the
152       IEEE 128-bit ("quadruple precision") which would give 116 bit of
153       mantissa (nor it is implemented in hardware), instead it's a special
154       software implementation called "double-double", which gives 106 bits of
155       mantissa.
156
157       There seem to be various problems in this long double implementation.
158       If Configure detects this brokenness, it will disable the long double
159       support.  This can be overridden with explicit "-Duselongdouble" (or
160       "-Dusemorebits", which enables both long doubles and 64 bit integers).
161       If you decide to enable long doubles, for most of the broken things
162       Perl has implemented workarounds, but the handling of the special
163       values infinity and NaN remains badly broken: for example infinity plus
164       zero results in NaN.
165
166   Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (threaded/32-bit)
167       With the following options you get a threaded Perl version which passes
168       all make tests in threaded 32-bit mode, which is the default
169       configuration for the Perl builds that AIX ships with.
170
171           rm config.sh
172           ./Configure \
173           -d \
174           -Dcc=cc_r \
175           -Duseshrplib \
176           -Dusethreads \
177           -Dprefix=/usr/opt/perl5_32
178
179       The -Dprefix option will install Perl in a directory parallel to the
180       IBM AIX system Perl installation.
181
182   Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (32-bit)
183       With the following options you get a Perl version which passes all make
184       tests in 32-bit mode.
185
186           rm config.sh
187           ./Configure \
188           -d \
189           -Dcc=cc_r \
190           -Duseshrplib \
191           -Dprefix=/usr/opt/perl5_32
192
193       The -Dprefix option will install Perl in a directory parallel to the
194       IBM AIX system Perl installation.
195
196   Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (threaded/64-bit)
197       With the following options you get a threaded Perl version which passes
198       all make tests in 64-bit mode.
199
200        export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell)
201
202        rm config.sh
203        ./Configure \
204        -d \
205        -Dcc=cc_r \
206        -Duseshrplib \
207        -Dusethreads \
208        -Duse64bitall \
209        -Dprefix=/usr/opt/perl5_64
210
211   Recommended Options AIX 5.1/5.2/5.3/6.1 and 7.1 (64-bit)
212       With the following options you get a Perl version which passes all make
213       tests in 64-bit mode.
214
215        export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell)
216
217        rm config.sh
218        ./Configure \
219        -d \
220        -Dcc=cc_r \
221        -Duseshrplib \
222        -Duse64bitall \
223        -Dprefix=/usr/opt/perl5_64
224
225       The -Dprefix option will install Perl in a directory parallel to the
226       IBM AIX system Perl installation.
227
228       If you choose gcc to compile 64-bit Perl then you need to add the
229       following option:
230
231           -Dcc='gcc -maix64'
232
233   Compiling Perl 5 on AIX 7.1.0
234       A regression in AIX 7 causes a failure in make test in Time::Piece
235       during daylight savings time.  APAR IV16514 provides the fix for this.
236       A quick test to see if it's required, assuming it is currently daylight
237       savings in Eastern Time, would be to run " TZ=EST5 date +%Z ".  This
238       will come back with "EST" normally, but nothing if you have the
239       problem.
240
241   Compiling Perl 5 on older AIX versions up to 4.3.3
242       Due to the fact that AIX 4.3.3 reached end-of-service in December 31,
243       2003 this information is provided as is. The Perl versions prior to
244       Perl 5.8.9 could be compiled on AIX up to 4.3.3 with the following
245       settings (your mileage may vary):
246
247       When compiling Perl, you must use an ANSI C compiler. AIX does not ship
248       an ANSI compliant C-compiler with AIX by default, but binary builds of
249       gcc for AIX are widely available.
250
251       At the moment of writing, AIX supports two different native C
252       compilers, for which you have to pay: xlC and vac. If you decide to use
253       either of these two (which is quite a lot easier than using gcc), be
254       sure to upgrade to the latest available patch level. Currently:
255
256           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
257           vac.C     4.4.0.3  or 5.0.2.6 or 6.0.0.1
258
259       note that xlC has the OS version in the name as of version 4.0.2.0, so
260       you will find xlC.C for AIX-5.0 as package
261
262           xlC.aix50.rte   5.0.2.0 or 6.0.0.3
263
264       subversions are not the same "latest" on all OS versions. For example,
265       the latest xlC-5 on aix41 is 5.0.2.9, while on aix43, it is 5.0.2.7.
266
267       Perl can be compiled with either IBM's ANSI C compiler or with gcc.
268       The former is recommended, as not only can it compile Perl with no
269       difficulty, but also can take advantage of features listed later that
270       require the use of IBM compiler-specific command-line flags.
271
272       The IBM's compiler patch levels 5.0.0.0 and 5.0.1.0 have compiler
273       optimization bugs that affect compiling perl.c and regcomp.c,
274       respectively.  If Perl's configuration detects those compiler patch
275       levels, optimization is turned off for the said source code files.
276       Upgrading to at least 5.0.2.0 is recommended.
277
278       If you decide to use gcc, make sure your installation is recent and
279       complete, and be sure to read the Perl INSTALL file for more gcc-
280       specific details. Please report any hoops you had to jump through to
281       the development team.
282
283   OS level
284       Before installing the patches to the IBM C-compiler you need to know
285       the level of patching for the Operating System. IBM's command 'oslevel'
286       will show the base, but is not always complete (in this example oslevel
287       shows 4.3.NULL, whereas the system might run most of 4.3.THREE):
288
289           # oslevel
290           4.3.0.0
291           # lslpp -l | grep 'bos.rte '
292           bos.rte           4.3.3.75  COMMITTED  Base Operating System Runtime
293           bos.rte            4.3.2.0  COMMITTED  Base Operating System Runtime
294           #
295
296       The same might happen to AIX 5.1 or other OS levels. As a side note,
297       Perl cannot be built without bos.adt.syscalls and bos.adt.libm
298       installed
299
300           # lslpp -l | egrep "syscalls|libm"
301           bos.adt.libm      5.1.0.25  COMMITTED  Base Application Development
302           bos.adt.syscalls  5.1.0.36  COMMITTED  System Calls Application
303           #
304
305   Building Dynamic Extensions on AIX < 5L
306       AIX supports dynamically loadable objects as well as shared libraries.
307       Shared libraries by convention end with the suffix .a, which is a bit
308       misleading, as an archive can contain static as well as dynamic
309       members.  For Perl dynamically loaded objects we use the .so suffix
310       also used on many other platforms.
311
312       Note that starting from Perl 5.7.2 (and consequently 5.8.0) and AIX 4.3
313       or newer Perl uses the AIX native dynamic loading interface in the so
314       called runtime linking mode instead of the emulated interface that was
315       used in Perl releases 5.6.1 and earlier or, for AIX releases 4.2 and
316       earlier.  This change does break backward compatibility with compiled
317       modules from earlier Perl releases.  The change was made to make Perl
318       more compliant with other applications like Apache/mod_perl which are
319       using the AIX native interface. This change also enables the use of C++
320       code with static constructors and destructors in Perl extensions, which
321       was not possible using the emulated interface.
322
323   The IBM ANSI C Compiler
324       All defaults for Configure can be used.
325
326       If you've chosen to use vac 4, be sure to run 4.4.0.3. Older versions
327       will turn up nasty later on. For vac 5 be sure to run at least 5.0.1.0,
328       but vac 5.0.2.6 or up is highly recommended. Note that since IBM has
329       removed vac 5.0.2.1 through 5.0.2.5 from the software depot, these
330       versions should be considered obsolete.
331
332       Here's a brief lead of how to upgrade the compiler to the latest level.
333       Of course this is subject to changes.  You can only upgrade versions
334       from ftp-available updates if the first three digit groups are the same
335       (in where you can skip intermediate unlike the patches in the developer
336       snapshots of Perl), or to one version up where the "base" is available.
337       In other words, the AIX compiler patches are cumulative.
338
339        vac.C.4.4.0.1 => vac.C.4.4.0.3  is OK     (vac.C.4.4.0.2 not needed)
340        xlC.C.3.1.3.3 => xlC.C.3.1.4.10 is NOT OK (xlC.C.3.1.4.0 is not
341                                                                     available)
342
343        # ftp ftp.software.ibm.com
344        Connected to service.boulder.ibm.com.
345        : welcome message ...
346        Name (ftp.software.ibm.com:merijn): anonymous
347        331 Guest login ok, send your complete e-mail address as password.
348        Password:
349        ... accepted login stuff
350        ftp> cd /aix/fixes/v4/
351        ftp> dir other other.ll
352        output to local-file: other.ll? y
353        200 PORT command successful.
354        150 Opening ASCII mode data connection for /bin/ls.
355        226 Transfer complete.
356        ftp> dir xlc xlc.ll
357        output to local-file: xlc.ll? y
358        200 PORT command successful.
359        150 Opening ASCII mode data connection for /bin/ls.
360        226 Transfer complete.
361        ftp> bye
362        ... goodbye messages
363        # ls -l *.ll
364        -rw-rw-rw-   1 merijn   system    1169432 Nov  2 17:29 other.ll
365        -rw-rw-rw-   1 merijn   system      29170 Nov  2 17:29 xlc.ll
366
367       On AIX 4.2 using xlC, we continue:
368
369        # lslpp -l | fgrep 'xlC.C '
370          xlC.C                     3.1.4.9  COMMITTED  C for AIX Compiler
371          xlC.C                     3.1.4.0  COMMITTED  C for AIX Compiler
372        # grep 'xlC.C.3.1.4.*.bff' xlc.ll
373        -rw-r--r--   1 45776101 1       6286336 Jul 22 1996  xlC.C.3.1.4.1.bff
374        -rw-rw-r--   1 45776101 1       6173696 Aug 24 1998  xlC.C.3.1.4.10.bff
375        -rw-r--r--   1 45776101 1       6319104 Aug 14 1996  xlC.C.3.1.4.2.bff
376        -rw-r--r--   1 45776101 1       6316032 Oct 21 1996  xlC.C.3.1.4.3.bff
377        -rw-r--r--   1 45776101 1       6315008 Dec 20 1996  xlC.C.3.1.4.4.bff
378        -rw-rw-r--   1 45776101 1       6178816 Mar 28 1997  xlC.C.3.1.4.5.bff
379        -rw-rw-r--   1 45776101 1       6188032 May 22 1997  xlC.C.3.1.4.6.bff
380        -rw-rw-r--   1 45776101 1       6191104 Sep  5 1997  xlC.C.3.1.4.7.bff
381        -rw-rw-r--   1 45776101 1       6185984 Jan 13 1998  xlC.C.3.1.4.8.bff
382        -rw-rw-r--   1 45776101 1       6169600 May 27 1998  xlC.C.3.1.4.9.bff
383        # wget ftp://ftp.software.ibm.com/aix/fixes/v4/xlc/xlC.C.3.1.4.10.bff
384        #
385
386       On AIX 4.3 using vac, we continue:
387
388        # lslpp -l | grep 'vac.C '
389         vac.C                      5.0.2.2  COMMITTED  C for AIX Compiler
390         vac.C                      5.0.2.0  COMMITTED  C for AIX Compiler
391        # grep 'vac.C.5.0.2.*.bff' other.ll
392        -rw-rw-r--   1 45776101 1       13592576 Apr 16 2001  vac.C.5.0.2.0.bff
393        -rw-rw-r--   1 45776101 1       14133248 Apr  9 2002  vac.C.5.0.2.3.bff
394        -rw-rw-r--   1 45776101 1       14173184 May 20 2002  vac.C.5.0.2.4.bff
395        -rw-rw-r--   1 45776101 1       14192640 Nov 22 2002  vac.C.5.0.2.6.bff
396        # wget ftp://ftp.software.ibm.com/aix/fixes/v4/other/vac.C.5.0.2.6.bff
397        #
398
399       Likewise on all other OS levels. Then execute the following command,
400       and fill in its choices
401
402        # smit install_update
403         -> Install and Update from LATEST Available Software
404         * INPUT device / directory for software [ vac.C.5.0.2.6.bff    ]
405         [ OK ]
406         [ OK ]
407
408       Follow the messages ... and you're done.
409
410       If you like a more web-like approach, a good start point can be
411       <http://www14.software.ibm.com/webapp/download/downloadaz.jsp> and
412       click "C for AIX", and follow the instructions.
413
414   The usenm option
415       If linking miniperl
416
417        cc -o miniperl ... miniperlmain.o opmini.o perl.o ... -lm -lc ...
418
419       causes error like this
420
421        ld: 0711-317 ERROR: Undefined symbol: .aintl
422        ld: 0711-317 ERROR: Undefined symbol: .copysignl
423        ld: 0711-317 ERROR: Undefined symbol: .syscall
424        ld: 0711-317 ERROR: Undefined symbol: .eaccess
425        ld: 0711-317 ERROR: Undefined symbol: .setresuid
426        ld: 0711-317 ERROR: Undefined symbol: .setresgid
427        ld: 0711-317 ERROR: Undefined symbol: .setproctitle
428        ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more
429                                                                   information.
430
431       you could retry with
432
433        make realclean
434        rm config.sh
435        ./Configure -Dusenm ...
436
437       which makes Configure to use the "nm" tool when scanning for library
438       symbols, which usually is not done in AIX.
439
440       Related to this, you probably should not use the "-r" option of
441       Configure in AIX, because that affects of how the "nm" tool is used.
442
443   Using GNU's gcc for building Perl
444       Using gcc-3.x (tested with 3.0.4, 3.1, and 3.2) now works out of the
445       box, as do recent gcc-2.9 builds available directly from IBM as part of
446       their Linux compatibility packages, available here:
447
448         http://www.ibm.com/servers/aix/products/aixos/linux/
449
450   Using Large Files with Perl < 5L
451       Should yield no problems.
452
453   Threaded Perl < 5L
454       Threads seem to work OK, though at the moment not all tests pass when
455       threads are used in combination with 64-bit configurations.
456
457       You may get a warning when doing a threaded build:
458
459         "pp_sys.c", line 4640.39: 1506-280 (W) Function argument assignment
460         between types "unsigned char*" and "const void*" is not allowed.
461
462       The exact line number may vary, but if the warning (W) comes from a
463       line line this
464
465         hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
466
467       in the "pp_ghostent" function, you may ignore it safely.  The warning
468       is caused by the reentrant variant of gethostbyaddr() having a slightly
469       different prototype than its non-reentrant variant, but the difference
470       is not really significant here.
471
472   64-bit Perl < 5L
473       If your AIX is installed with 64-bit support, you can expect 64-bit
474       configurations to work. In combination with threads some tests might
475       still fail.
476
477   AIX 4.2 and extensions using C++ with statics
478       In AIX 4.2 Perl extensions that use C++ functions that use statics may
479       have problems in that the statics are not getting initialized.  In
480       newer AIX releases this has been solved by linking Perl with the libC_r
481       library, but unfortunately in AIX 4.2 the said library has an obscure
482       bug where the various functions related to time (such as time() and
483       gettimeofday()) return broken values, and therefore in AIX 4.2 Perl is
484       not linked against the libC_r.
485

AUTHORS

487       Rainer Tammer <tammer@tammer.net>
488
489
490
491perl v5.34.1                      2022-03-15                        PERLAIX(1)
Impressum