[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 How to create shared libraries / dlls?

The precise method for creating shared libraries varies between different systems. There are two main parts to the process; firstly the objects to be included in the shared library must be compiled, usually with options to indicate that the code is to be position-independent; secondly, these objects are linked together to form the library.

Here's a trivial example that should illustrate the idea:

 
/* file shrobj.c */

const char *myfunc()
{
    return "Hello World";
}

/* end shrobj.c */

/* file hello.c */

#include <stdio.h>

extern const char *myfunc();

main()
{
    printf("%s\n", myfunc());
    return 0;
}

/* end hello.c */

$ gcc -fpic -c shrobj.c
$ gcc -shared -o libshared.so shrobj.o
$ gcc hello.c libshared.so
$ ./a.out
Hello World

By far the best method if you want the library and build procedure to be anything approaching portable is to use GNU Libtool. This is a small suite of utilities which know about the platform-dependent aspects of building shared libraries; you can distribute the necessary bits with your program, so that when the installer configures the package, he or she can decide what libraries to build. Libtool works fine on systems which do not support shared libraries. It also knows how to hook into GNU Autoconf and GNU Automake (if you use those tools to manage your program's build procedure).

If you don't want to use Libtool, then for compilers other than gcc, you should change the compiler options as follows:

AIX 3.2 using xlc (unverified)

Drop the ‘-fpic’, and use ‘-bM:SRE -bE:libshared.exp’ instead of ‘-shared’. You also need to create a file ‘libshared.exp’ containing the list of symbols to export, in this case ‘myfunc’. In addition, use ‘-e _nostart’ when linking the library (on newer versions of AIX, I believe this changes to ‘-bnoentry’).

SCO OpenServer 5 using the SCO Development System (unverified)

Shared libraries are only available on OS5 if you compile to ELF format, which requires the ‘-belf’ option. Use ‘-Kpic’ instead of ‘-fpic’, and ‘cc -belf -G’ for the link step.

Solaris using SparcWorks compilers

Use ‘-pic’ instead of ‘-fpic’, and use ‘ld -G’ instead of ‘gcc -shared’.

(Submission of additional entries for the above table is encouraged.)

Other issues to watch out for:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated on September, 10 2007 using texi2html 1.77.