<!--$Id: solaris.so,v 11.14 2000/09/13 17:22:20 bostic Exp $-->
<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Solaris</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
</head>
<body bgcolor=white>
        <a name="2"><!--meow--></a>    
<table><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
<td width="1%"><a href="../../ref/build_unix/sco.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/sunos.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
<h1 align=center>Solaris</h1>
<p><ol>
<p><li><b>I can't compile and run multi-threaded applications.</b>
<p>Special compile-time flags and additional libraries are required when
compiling threaded applications on Solaris.  If you are compiling a
threaded application, you must compile with the D_REENTRANT flag and link
with the libpthread.a or libthread.a libraries:
<p><blockquote><pre>cc -mt ...
cc -D_REENTRANT ... -lthread
cc -D_REENTRANT ... -lpthread</pre></blockquote>
<p>The Berkeley DB library will automatically build with the correct options.
<hr size=1 noshade>
<p><li><b>I've installed gcc on my Solaris system, but configuration
fails because the compiler doesn't work.</b>
<p>On some versions of Solaris, there is a cc executable in the user's path,
but all it does is display an error message and fail:
<p><blockquote><pre>% which cc
/usr/ucb/cc
% cc
/usr/ucb/cc: language optional software package not installed</pre></blockquote>
<p>As Berkeley DB always uses the native compiler in preference to gcc, this is a
fatal error.  If the error message you're seeing is:
<p><blockquote><pre>checking whether the C compiler (cc -O ) works... no
configure: error: installation or configuration problem: C compiler cannot create executables.</pre></blockquote>
<p>then this may be the problem you're seeing.  The simplest workaround is
to set your CC environment variable to the system compiler, e.g.:
<p><blockquote><pre>env CC=gcc ../dist/configure</pre></blockquote>
<p>and reconfigure.
<p>If you are using the --configure-cxx option, you may also want to specify
a C++ compiler, e.g.:
<p><blockquote><pre>env CC=gcc CCC=g++ ../dist/configure</pre></blockquote>
<hr size=1 noshade>
<p><li><b>I get the error
"libc internal error: _rmutex_unlock: rmutex not held", followed by a core
dump, when running threaded or JAVA programs.</b>
<p>This is a known bug in Solaris 2.5 and it is fixed by Sun patch 103187-25.
<hr size=1 noshade>
<p><li><b>I get error reports of non-existent files, corrupted metadata
pages and core dumps.</b>
<p>Solaris 7 contains a bug in the threading libraries (-lpthread, -lthread)
which causes the wrong version of the pwrite routine to be linked into
the application if the thread library is linked in after the the C
library.  The result will be that the pwrite function is called rather
than the pwrite64.  To work around the problem, use an explicit link order
when creating your application.
<p>Sun Microsystems is tracking this problem with Bug Id's 4291109 and 4267207,
and patch 106980-09 to Solaris 7 fixes the problem.
<p><blockquote><pre>Bug Id: 4291109
Duplicate of: 4267207
Category: library
Subcategory: libthread
State: closed
Synopsis: pwrite64 mapped to pwrite
Description:
When libthread is linked after libc, there is a table of functions in
libthread that gets "wired into" libc via _libc_threads_interface().
The table in libthread is wrong in both Solaris 7 and on28_35 for the
TI_PWRITE64 row (see near the end).</pre></blockquote>
<hr size=1 noshade>
<p><li><b>During configuration I see a message that large file support has
been turned off.</b>
<p>The Solaris 8 system include files redefine "open" when big-file support (the
HAVE_FILE_OFFSET_BITS and _FILE_OFFSET_BITS #defines) is enabled.  This
causes problems when compiling for C++, where "open" is a legal
identifier, used in the Berkeley DB C++ API.  For this reason, we automatically
turn off big-file support when Berkeley DB is configured with a C++ API.  This
should not be a problem for applications unless there is a need to create
databases larger than 2GB.
</ol>
<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/sco.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/sunos.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
</body>
</html>