<p>AIX 4.1 allows applications to map only 10 system shared memory
segments. In AIX 4.3, this has been raised to 256K segments, but only
if you set the environment variable "export EXTSHM=ON".</p>
</li>
<li>
<spanclass="bold">
<strong>On AIX 4.3.2 (or before) I see duplicate symbol warnings when
building the C++ shared library and when linking applications.</strong>
</span>
<p>We are aware of some duplicate symbol warnings with this platform,
but they do not appear to affect the correct operation of applications.</p>
</li>
<li>
<spanclass="bold">
<strong>On AIX 4.3.3 I see undefined symbols for DbEnv::set_error_stream,
Db::set_error_stream or DbEnv::verify when linking C++ applications.
(These undefined symbols also appear when building the Berkeley DB C++ example
applications).</strong>
</span>
<p>By default, Berkeley DB is built with _LARGE_FILES set to 1 to support the
creation of "large" database files. However, this also affects how
standard classes, like iostream, are named internally. When building
your application, use a "-D_LARGE_FILES=1" compilation option, or insert
"#define _LARGE_FILES 1" before any #include statements.</p>
</li>
<li>
<spanclass="bold">
<strong>I can't create database files larger than 1GB on AIX.</strong>
</span>
<p>If you're running on AIX 4.1 or earlier, try changing the source code
for <codeclass="filename">os/os_open.c</code> to always specify the <spanclass="bold"><strong>O_LARGEFILE</strong></span>
flag to the <codeclass="literal">open</code>(2) system call, and recompile Berkeley DB from
scratch.</p>
<p>Also, the documentation for the IBM Visual Age compiler states that it
does not not support the 64-bit filesystem APIs necessary for creating
large files; the ibmcxx product must be used instead. We have not heard
whether the GNU gcc compiler supports the 64-bit APIs or not.</p>
<p>Finally, to create large files under AIX, the filesystem has to be
configured to support large files and the system wide user hard-limit
for file sizes has to be greater than 1GB.</p>
</li>
<li>
<spanclass="bold">
<strong>I see errors about "open64" when building Berkeley DB applications.</strong>
</span>
<p>System include files (most commonly fcntl.h) in some releases of AIX
and Solaris redefine "open" when large-file support is enabled for
applications. This causes problems when compiling applications because
"open" is a method in the Berkeley DB APIs. To work around this problem:
</p>
<divclass="orderedlist">
<oltype="a">
<li>Avoid including the problematical system include files in source code
files which also include Berkeley DB include files and call into the Berkeley DB
API.</li>
<li>Before building Berkeley DB, modify the generated include file db.h to itself
include the problematical system include files.</li>
<li>Turn off Berkeley DB large-file support by specifying the
<aclass="link"href="build_unix_conf.html#build_unix_conf.--disable-largefile">--disable-largefile</a> configuration option and rebuilding.</li>
</ol>
</div>
</li>
<li>
<spanclass="bold">
<strong>I see the error "Redeclaration of lseek64" when building Berkeley DB with the --enable-sql and --enable-test options.</strong>
</span>
<p>In some releases of AIX, the system include files (most commonly <codeclass="literal">unistd.h</code>) redefine <codeclass="literal">lseek</code> to <codeclass="literal">lseek64</code> when large-file support is enabled even though <codeclass="literal">lseek</code> may have already been defined when the <codeclass="literal">_LARGE_FILE_API</code> macro is on. To work around this problem, do either one of the following:
</p>
<divclass="orderedlist">
<oltype="a">
<li>Disable large-file support in Berkeley DB by specifying the <codeclass="literal">--disable-largefile</code> configuration option and rebuilding. </li>
<li>Edit <codeclass="literal">db.h</code> manually after running the configure command, and remove the line that includes <codeclass="literal">unistd.h</code>. </li>