Easysoft ODBC-ODBC Bridge

Which version of ODBC-ODBC Bridge should I be using?

Article:
00115
Last Reviewed:
10th January 2024
Revision:
4

Linux systems can run with two different and incompatible C runtime libraries. libc5 is the old C runtime library and glibc (also known as libc6) is the latest thread-safe version. The Easysoft ODBC-ODBC Bridge 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 ODBC-ODBC Bridge install contains a small program called testlib (which will be in the directory created when you unpack the ODBC-ODBC Bridge 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 ODBC-ODBC Bridge 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 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, you cannot use the libc version of ODBC-ODBC Bridge 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 ODBC-ODBC Bridge 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 ODBC-ODBC Bridge.

> 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 ODBC-ODBC Bridge.

There is one further distribution of ODBC-ODBC Bridge 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) ODBC-ODBC Bridge 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)