PDA

View Full Version : HOW TO - created and use shared library (.so)



big4mil
25th November 2006, 08:05
Hi all,

I've created my own shared library and tried to load it dynamically while my small test app is running. Unfortunately it's not working - the lib is not loaded!

In the .pro file for my lib:


TEMPLATE = lib
CONFIG += dll
TARGET = mylib

In the header file for my lib:


#include <Qt/qglobal.h>

#ifdef TEST_LIB
# define TEST_EXPORT Q_DECL_EXPORT
#else
# define TEST_EXPORT Q_DECL_IMPORT
#endif

class TEST_EXPORT DBConnection
{
...
};


Is there somthing else what I need to do?

Then in my test app I call the lib:


QLibrary myLib("mylib");

If I check it with


myLib.isLoaded()

then I can see that the lib is not loaded.
Maybe it can't find the lib? Where I have to put my lib that its beeing loaded?

Any help would be great!!
Many thanks and best regrads
big4mil

wysota
25th November 2006, 08:51
You could place it in the same directory as the main binary.

I might be wrong here, but I think you need to wrap your methods in 'extern "C"' statements if you want to resolve symbols dynamically. And you'll need factory functions to create instances of your class.

big4mil
25th November 2006, 09:02
Hi wysota,

many thanks for your response. My lib is in the same directoy as the app is. I develop under SUSE Linux 10.1.

Can you give me please one simple example on how to do this? I have never done this bevor. Would be great.

What do you mean with:

And you'll need factory functions to create instances of your class.

Many thanks
big4mil

wysota
25th November 2006, 12:43
See the C++ dlopen mini-howto (http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html) for details. QLibrary uses dlopen internally so everything there applies.

big4mil
25th November 2006, 23:11
that's fine - thanks for the link...I'll check that out!!


big4mil