• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 350
  • Last Modified:

Building a Multi-threaded Program with Shared Libraries.

Dear experts,

I would like to write a multi-threaded program using shared libraries. There will be a front-end module calling external (kept as a file) shared libraries as separate threads. How can I achieve this, and I wonder how to create a Windows DLL like executables in Unix using C++.

Any document and comment welcomes.

  • 3
4 Solutions
DLL is Windows Term, In Linux they are called shared libraries.
See this:

You can create linux .so files.
Using gcc you can create a .so by using the -shared option.
gcc -shared -o libfoo.so foo.c
If you name your shared object lib*.so you can compile against it by using the `-l` option on your linker. Note that the "lib" is inferred in this circumstance. ie.
ld -o a.out -lfoo someobject.o

Alternatively you can load .so files at runtime, just as you can with .dlls, using dlopen() and dlsym().
It would be nice to know which version of *nix you're using and which compilers you're using.  We're just assuming you're using gcc on Linux.

You can't create Windows DLLs on Linux: the architecture is different and the concepts are different.  The program has to be compiled as multithreaded (there are 4 models on windows).  On Windows, a DLL is in 2 parts: a .lib for others to link with and a .dll for runtime.  The .dll can be either in the same directory as the executable or on the path.

On *nix, you probably need a -mt flag somewhere on the compile or the link line.  The way shared objects are approached is different, depending on which version of *nix you are using.  Some versions of *nix have their own multi-threading libraries, others use pthreads.  HPUX, for instance uses .sl instead of .so and, depending on whether you are using HPUX 10 or 11, it uses different environment variables.  Solaris used to have its own thread library and AIX is another different ball game.

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now