Library dynamic dependencies on Solaris

Kirsten Mayer kmayer@isw.net.au
Wed Sep 13 01:17:00 GMT 2006


Hi,
I need to distribute a custom dynamic library (or api) that depends on 
another dynamic library (a database) but I can't get the database to be 
found by the api except by putting the database in a specific directory, 
which means whoever uses my library must replicate my directory structure.

Specifically, if I use the option -LDIR ./release/libmydb.so when 
compiling myapi it will find libmydb.so only if I place libmydb.so in the 
subdirectory ./release.  Alternatively, if I use the option  -L ./release 
-lmydb when compiling myapi it will not be able to find mydb.

IN DETAIL:
I am building two C++ libraries on Solaris release 5.9 using gcc 2.95.3. 
One library, called "myapi", needs to link dynamically to the other, 
called "mydb". 
I have tried the following commands to build each library:

mydb: $(MYDB_OBJS)
        g++ -fPIC -lstdc++ -shared -lz -o ./release/libmydb.so -D_NDEBUG 
$(MYDB_OBJS)

myapi: $(components) mydb $(DIR_API)/MyAPI.cpp $(DIR_API)/MyAPI.h 
$(DIR_API)/StdAfx.cpp
        g++ -shared -O3 -fPIC -o ./release/libmyapi.so -D_SOLARIS 
-D_NDEBUG \
                 -L ./release -lmydb -R . $(DIR_API)/MyAPI.cpp 
$(DIR_API)/StdAfx.cpp $(components)

However, libmyapi.so can't find libmydb.so:
$ ldd release/libmyapi.so
        libmydb.so =>    (file not found)

The best I can do to find the library that myapi depends on is put it into 
a fixed directory with this command:

myapi : $(components) ./release/libmydb.so $(DIR_API)/MyAPI.cpp 
$(DIR_API)/MyAPI.h $(DIR_API)/StdAfx.cpp
        g++ -shared -O3 -fPIC -o ./release/libmyapi.so -D_SOLARIS \
                -LDIR ./release/libmydb.so "$(DIR_API)/MyAPI.cpp" 
$(DIR_API)/StdAfx.cpp $(components)

In this case, libmyapi.so can find libmydb.so only in the ./release 
directory:
$ ldd release/libmyapi.so
        libmydb.so =>    ./release/libmydb.so

I don't want users of libmyapi.so to have to create a ./release 
subdirectory to be able to use libmydb.so

If someone can tell me what command I should use, I would be very 
grateful. 
Many thanks in advance.
Kirsten



More information about the Gcc-help mailing list