1PERLAIX(1) Perl Programmers Reference Guide PERLAIX(1)
2
3
4
6 README.aix - Perl version 5 on IBM Unix (AIX) systems
7
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 com‐
11 piled and/or runs.
12
13 Compiling Perl 5 on AIX
14
15 When compiling Perl, you must use an ANSI C compiler. AIX does not ship
16 an ANSI compliant C-compiler with AIX by default, but binary builds of
17 gcc for AIX are widely available.
18
19 At the moment of writing, AIX supports two different native C compil‐
20 ers, for which you have to pay: xlC and vac. If you decide to use
21 either of these two (which is quite a lot easier than using gcc), be
22 sure to upgrade to the latest available patch level. Currently:
23
24 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
25 vac.C 4.4.0.3 or 5.0.2.6 or 6.0.0.1
26
27 note that xlC has the OS version in the name as of version 4.0.2.0, so
28 you will find xlC.C for AIX-5.0 as package
29
30 xlC.aix50.rte 5.0.2.0 or 6.0.0.3
31
32 subversions are not the same "latest" on all OS versions. For example,
33 the latest xlC-5 on aix41 is 5.0.2.9, while on aix43, it is 5.0.2.7.
34
35 Perl can be compiled with either IBM's ANSI C compiler or with gcc.
36 The former is recommended, as not only can it compile Perl with no dif‐
37 ficulty, but also can take advantage of features listed later that
38 require the use of IBM compiler-specific command-line flags.
39
40 The IBM's compiler patch levels 5.0.0.0 and 5.0.1.0 have compiler opti‐
41 mization bugs that affect compiling perl.c and regcomp.c, respectively.
42 If Perl's configuration detects those compiler patch levels, optimiza‐
43 tion is turned off for the said source code files. Upgrading to at
44 least 5.0.2.0 is recommended.
45
46 If you decide to use gcc, make sure your installation is recent and
47 complete, and be sure to read the Perl README file for more gcc-spe‐
48 cific details. Please report any hoops you had to jump through to the
49 development team.
50
51 OS level
52
53 Before installing the patches to the IBM C-compiler you need to know
54 the level of patching for the Operating System. IBM's command 'oslevel'
55 will show the base, but is not always complete (in this example oslevel
56 shows 4.3.NULL, whereas the system might run most of 4.3.THREE):
57
58 # oslevel
59 4.3.0.0
60 # lslpp -l ⎪ grep 'bos.rte '
61 bos.rte 4.3.3.75 COMMITTED Base Operating System Runtime
62 bos.rte 4.3.2.0 COMMITTED Base Operating System Runtime
63 #
64
65 The same might happen to AIX 5.1 or other OS levels. As a side note,
66 perl cannot be built without bos.adt.syscalls and bos.adt.libm
67 installed
68
69 # lslpp -l ⎪ egrep "syscalls⎪libm"
70 bos.adt.libm 5.1.0.25 COMMITTED Base Application Development
71 bos.adt.syscalls 5.1.0.36 COMMITTED System Calls Application
72 #
73
74 Building Dynamic Extensions on AIX
75
76 AIX supports dynamically loadable objects as well as shared libraries.
77 Shared libraries by convention end with the suffix .a, which is a bit
78 misleading, as an archive can contain static as well as dynamic mem‐
79 bers. For perl dynamically loaded objects we use the .so suffix also
80 used on many other platforms.
81
82 Note that starting from Perl 5.7.2 (and consequently 5.8.0) and AIX 4.3
83 or newer Perl uses the AIX native dynamic loading interface in the so
84 called runtime linking mode instead of the emulated interface that was
85 used in Perl releases 5.6.1 and earlier or, for AIX releases 4.2 and
86 earlier. This change does break backward compatibility with compiled
87 modules from earlier perl releases. The change was made to make Perl
88 more compliant with other applications like Apache/mod_perl which are
89 using the AIX native interface. This change also enables the use of C++
90 code with static constructors and destructors in perl extensions, which
91 was not possible using the emulated interface.
92
93 The IBM ANSI C Compiler
94
95 All defaults for Configure can be used.
96
97 If you've chosen to use vac 4, be sure to run 4.4.0.3. Older versions
98 will turn up nasty later on. For vac 5 be sure to run at least 5.0.1.0,
99 but vac 5.0.2.6 or up is highly recommended. Note that since IBM has
100 removed vac 5.0.2.1 through 5.0.2.5 from the software depot, these ver‐
101 sions should be considered obsolete.
102
103 Here's a brief lead of how to upgrade the compiler to the latest level.
104 Of course this is subject to changes. You can only upgrade versions
105 from ftp-available updates if the first three digit groups are the same
106 (in where you can skip intermediate unlike the patches in the developer
107 snapshots of perl), or to one version up where the "base" is available.
108 In other words, the AIX compiler patches are cumulative.
109
110 vac.C.4.4.0.1 => vac.C.4.4.0.3 is OK (vac.C.4.4.0.2 not needed)
111 xlC.C.3.1.3.3 => xlC.C.3.1.4.10 is NOT OK (xlC.C.3.1.4.0 is not available)
112
113 # ftp ftp.software.ibm.com
114 Connected to service.boulder.ibm.com.
115 : welcome message ...
116 Name (ftp.software.ibm.com:merijn): anonymous
117 331 Guest login ok, send your complete e-mail address as password.
118 Password:
119 ... accepted login stuff
120 ftp> cd /aix/fixes/v4/
121 ftp> dir other other.ll
122 output to local-file: other.ll? y
123 200 PORT command successful.
124 150 Opening ASCII mode data connection for /bin/ls.
125 226 Transfer complete.
126 ftp> dir xlc xlc.ll
127 output to local-file: xlc.ll? y
128 200 PORT command successful.
129 150 Opening ASCII mode data connection for /bin/ls.
130 226 Transfer complete.
131 ftp> bye
132 ... goodbye messages
133 # ls -l *.ll
134 -rw-rw-rw- 1 merijn system 1169432 Nov 2 17:29 other.ll
135 -rw-rw-rw- 1 merijn system 29170 Nov 2 17:29 xlc.ll
136
137 On AIX 4.2 using xlC, we continue:
138
139 # lslpp -l ⎪ fgrep 'xlC.C '
140 xlC.C 3.1.4.9 COMMITTED C for AIX Compiler
141 xlC.C 3.1.4.0 COMMITTED C for AIX Compiler
142 # grep 'xlC.C.3.1.4.*.bff' xlc.ll
143 -rw-r--r-- 1 45776101 1 6286336 Jul 22 1996 xlC.C.3.1.4.1.bff
144 -rw-rw-r-- 1 45776101 1 6173696 Aug 24 1998 xlC.C.3.1.4.10.bff
145 -rw-r--r-- 1 45776101 1 6319104 Aug 14 1996 xlC.C.3.1.4.2.bff
146 -rw-r--r-- 1 45776101 1 6316032 Oct 21 1996 xlC.C.3.1.4.3.bff
147 -rw-r--r-- 1 45776101 1 6315008 Dec 20 1996 xlC.C.3.1.4.4.bff
148 -rw-rw-r-- 1 45776101 1 6178816 Mar 28 1997 xlC.C.3.1.4.5.bff
149 -rw-rw-r-- 1 45776101 1 6188032 May 22 1997 xlC.C.3.1.4.6.bff
150 -rw-rw-r-- 1 45776101 1 6191104 Sep 5 1997 xlC.C.3.1.4.7.bff
151 -rw-rw-r-- 1 45776101 1 6185984 Jan 13 1998 xlC.C.3.1.4.8.bff
152 -rw-rw-r-- 1 45776101 1 6169600 May 27 1998 xlC.C.3.1.4.9.bff
153 # wget ftp://ftp.software.ibm.com/aix/fixes/v4/xlc/xlC.C.3.1.4.10.bff
154 #
155
156 On AIX 4.3 using vac, we continue:
157
158 # lslpp -l ⎪ grep 'vac.C '
159 vac.C 5.0.2.2 COMMITTED C for AIX Compiler
160 vac.C 5.0.2.0 COMMITTED C for AIX Compiler
161 # grep 'vac.C.5.0.2.*.bff' other.ll
162 -rw-rw-r-- 1 45776101 1 13592576 Apr 16 2001 vac.C.5.0.2.0.bff
163 -rw-rw-r-- 1 45776101 1 14133248 Apr 9 2002 vac.C.5.0.2.3.bff
164 -rw-rw-r-- 1 45776101 1 14173184 May 20 2002 vac.C.5.0.2.4.bff
165 -rw-rw-r-- 1 45776101 1 14192640 Nov 22 2002 vac.C.5.0.2.6.bff
166 # wget ftp://ftp.software.ibm.com/aix/fixes/v4/other/vac.C.5.0.2.6.bff
167 #
168
169 Likewise on all other OS levels. Then execute the following command,
170 and fill in its choices
171
172 # smit install_update
173 -> Install and Update from LATEST Available Software
174 * INPUT device / directory for software [ vac.C.5.0.2.6.bff ]
175 [ OK ]
176 [ OK ]
177
178 Follow the messages ... and you're done.
179
180 If you like a more web-like approach, a good start point can be
181 http://www14.software.ibm.com/webapp/download/downloadaz.jsp and click
182 "C for AIX", and follow the instructions.
183
184 The usenm option
185
186 If linking miniperl
187
188 cc -o miniperl ... miniperlmain.o opmini.o perl.o ... -lm -lc ...
189
190 causes error like this
191
192 ld: 0711-317 ERROR: Undefined symbol: .aintl
193 ld: 0711-317 ERROR: Undefined symbol: .copysignl
194 ld: 0711-317 ERROR: Undefined symbol: .syscall
195 ld: 0711-317 ERROR: Undefined symbol: .eaccess
196 ld: 0711-317 ERROR: Undefined symbol: .setresuid
197 ld: 0711-317 ERROR: Undefined symbol: .setresgid
198 ld: 0711-317 ERROR: Undefined symbol: .setproctitle
199 ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
200
201 you could retry with
202
203 make realclean
204 rm config.sh
205 ./Configure -Dusenm ...
206
207 which makes Configure to use the "nm" tool when scanning for library
208 symbols, which usually is not done in AIX.
209
210 Related to this, you probably should not use the "-r" option of Config‐
211 ure in AIX, because that affects of how the "nm" tool is used.
212
213 Using GNU's gcc for building perl
214
215 Using gcc-3.x (tested with 3.0.4, 3.1, and 3.2) now works out of the
216 box, as do recent gcc-2.9 builds available directly from IBM as part of
217 their Linux compatibility packages, available here:
218
219 http://www.ibm.com/servers/aix/products/aixos/linux/
220
221 Using Large Files with Perl
222
223 Should yield no problems.
224
225 Threaded Perl
226
227 Threads seem to work OK, though at the moment not all tests pass when
228 threads are used in combination with 64-bit configurations.
229
230 You may get a warning when doing a threaded build:
231
232 "pp_sys.c", line 4640.39: 1506-280 (W) Function argument assignment between types "unsigned char*" and "const void*" is not allowed.
233
234 The exact line number may vary, but if the warning (W) comes from a
235 line line this
236
237 hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
238
239 in the "pp_ghostent" function, you may ignore it safely. The warning
240 is caused by the reentrant variant of gethostbyaddr() having a slightly
241 different prototype than its non-reentrant variant, but the difference
242 is not really significant here.
243
244 64-bit Perl
245
246 If your AIX is installed with 64-bit support, you can expect 64-bit
247 configurations to work. In combination with threads some tests might
248 still fail.
249
250 AIX 4.2 and extensions using C++ with statics
251
252 In AIX 4.2 Perl extensions that use C++ functions that use statics may
253 have problems in that the statics are not getting initialized. In
254 newer AIX releases this has been solved by linking Perl with the libC_r
255 library, but unfortunately in AIX 4.2 the said library has an obscure
256 bug where the various functions related to time (such as time() and
257 gettimeofday()) return broken values, and therefore in AIX 4.2 Perl is
258 not linked against the libC_r.
259
261 H.Merijn Brand <h.m.brand@xs4all.nl>
262
264 Version 0.0.6: 23 Dec 2002
265
266
267
268perl v5.8.8 2006-01-07 PERLAIX(1)