Easysoft ODBC-ODBC Bridge

Which version of OOB should I be using?

Article:
00115
Last Reviewed:
28th October 2008
Revision:
4

Linux systems can run with two different and incompatible C runtime libraries. libc5 is the old C runtime library and glibc (also know as libc6) is the latest thread-safe version. The OOB version for libc5 will not work with a glibc based system and vice versa. It is not always that straightforward deciding whether your system is libc5 based or glibc based, as many newer Linux distributions come with glibc as the default, but have the older libc library for backwards compatibility. If you do not know whether you are libc5 or glibc based then try the following:

ls /lib/libc.*

On our glibc based machine at Easysoft, that command produces:

/lib/libc.so.4
/lib/libc.so.5
/lib/libc.so.6
/lib/libc.so.4.7.6
/lib/libc.so.5.4.46

Notice the libc.so.6, which is the sign that indicates this machine is running glibc. If you do not see a libc.so.6 then the chances are that you have a libc5 based system.

The OOB install contains a small program called testlib (whcih will be in the directory created when you unpack the OOB distribution). It is a small C program that uses C runtime functions and maths library functions, and is built on the same machine as the OOB distribution. When run, it should output "hello4". The install runs this to make sure you have the correct libraries, and if you do not, the install will be aborted.

There are however further issues. Even if you have support for libc5 and glibc, what version of the the C runtime library does your compiler and linker use when you create new libraries and executables? This is a key issue, as if you have both libc5 and glibc, but gcc/ld create executables linked with glibc then you cannot use the libc version of OOB with other programs that you build yourself (e.g. Perl/PHP). The testlib program referred to above is basically:

#include <stdio.h>
#include <math.h>

int main()
{
   double      j = 3.14;

   printf("hello%1.0f\n", ceil(j));
   return 0;
}

To be sure which version of OOB you should download, compile the above C program as follows:

  1. Create testlib.c containing the above code.
  2. Compile testlib with cc -o testlib testlib.c -lm
  3. Run ldd on testlib ldd ./testlib
  4. Examine the output to see what versions of the C runtime library and maths library your system is using.

    For example:

    > cc -o testlib testlib.c -lm
    > ldd ./testlib
    libm.so.5 => /lib/libm.so.5 (0x4000b000)
    libc.so.5 => /lib/libc.so.5 (0x40013000)
    

This system is using libc5 and version 5 of the maths library, so download the lib5 distribution of OOB.

> cc -o testlib testlib.c -lm
> ldd ./testlib
libm.so.6 => /lib/libm.so.6 (0x40018000)
libc.so.6 => /lib/libc.so.6 (0x40035000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

This system is using glibc and version 6 of the maths library, so download the glibc distribution of OOB.

There is one further distribution of OOB for glibc based systems and that is the thread-safe version which is linked with -lpthread (Linux Threads). You should only use this version if your application creates multiple threads and certainly do not attempt to use this with Perl, which is currently not threaded. The threaded (thread-safe) OOB distributions have -mt in the distribution name. You should also be aware that there have been a number of bugs reported in glibc/linux_threads and you should check the glibc web pages and mailing lists or the web page for your Linux distributor.

Once you have worked out which C run time library you are using download, the appropriate version from our FTP site.

Please make sure that you at least have the minimum version of libc required for your kernel. If you are unsure, check the Documentation/Changes file in the kernel sources.

Applies To

Knowledge Base Feedback

* Did this content help you?
* Please select one option based on your first choice:

(* Required Fields)


Oracle is a registered trademark of Oracle Corporation and/or its affiliates.