Search path for Berkeley DB linkage

Julien ÉLIE julien at trigofacile.com
Sat Oct 1 14:09:47 UTC 2011


Hi all,

I am a bit puzzled by how DB_LDFLAGS and DB_LIBS are used
in our source code.  They seem to be properly set in STORAGE_LIBS;
and used at link time for our libraries.


The issue I am facing is that when I want to run innd, I obtain:

./innd: error while loading shared libraries: libdb-5.2.so: cannot open shared object file: No such file or directory

Yet, I have in Makefile.global:

DB_CPPFLAGS     = -I/home/iulius/autobuild/bin/db-5.2.36/include
DB_LDFLAGS      = -L/home/iulius/autobuild/bin/db-5.2.36/lib
DB_LIBS         = -ldb -lz

DBM_CPPFLAGS    = -I/home/iulius/autobuild/bin/db-5.2.36/include
DBM_LIBS        = -L/home/iulius/autobuild/bin/db-5.2.36/lib -ldb




** Note that if I set to /home/iulius/autobuild/bin/db-5.2.36/lib
in my environment variables, innd properly starts.
That is why I assume something is missing in one of a link done
at build time.







A search for DB_CPPFLAGS/DBM_CPPFLAGS returns:

1/
In authprogs, ckpasswd:

CK_LIBS         = $(CRYPT_LIBS) $(SHADOW_LIBS) $(PAM_LIBS) $(DBM_LIBS)
ckpasswd: ckpasswd.o $(LIBAUTH) $(LIBINN)
        $(LINK) ckpasswd.o $(CK_LIBS) $(AUTH_LIBS)

Seems OK.


2/
frontends/Makefile:	$(CC) $(CFLAGS) $(DB_CPPFLAGS) -c $<
frontends/Makefile:	$(CC) $(CFLAGS) $(DB_CPPFLAGS) -c $<
frontends/Makefile:	$(CC) $(CFLAGS) $(DB_CPPFLAGS) -c $<
frontends/Makefile:	$(CC) $(CFLAGS) $(DB_CPPFLAGS) -c $<

for ovdb_init.o, ovdb_monitor.o, ovdb_server.o and ovdb_stat.o

which are properly linked:

STORELIBS       = $(BOTH) $(STORAGE_LIBS) $(LIBS)
ovdb_init:      ovdb_init.o    $(BOTH)   ; $(LINK) ovdb_init.o    $(STORELIBS)
ovdb_monitor:   ovdb_monitor.o $(BOTH)   ; $(LINK) ovdb_monitor.o $(STORELIBS)
ovdb_server:    ovdb_server.o  $(BOTH)   ; $(LINK) ovdb_server.o  $(STORELIBS)
ovdb_stat:      ovdb_stat.o    $(BOTH)   ; $(LINK) ovdb_stat.o    $(STORELIBS)


3/
In storage/Makefile:
CFLAGS        = $(GCFLAGS) -I. $(DB_CPPFLAGS)

.c.o .c.lo:
        $(LIBCC) $(CFLAGS) $(CCOUTPUT)


And everything is linked with $(STORAGE_LIBS) in libstorage:

ovtest: ov.c libstorage.$(EXTLIB) $(LIBINN)
        $(CC) $(CFLAGS) -D_TEST_ -o ovtest ov.c \
            libstorage.$(EXTLIB) $(LIBINN) $(STORAGE_LIBS) $(LIBS)


libstorage.la: $(OBJECTS) $(LIBINN)
        $(LIBLD) $(LDFLAGS) -o $@ $(LOBJECTS) \
            $(LIBINN) $(STORAGE_LIBS) $(LIBS) \
            -rpath $(PATHLIB) -version-info 2:0:0

libstorage.a: $(OBJECTS)
        ar r $@ $(OBJECTS)
        $(RANLIB) libstorage.a




Apart from these three points, I do not see what could generate the issue.
Is there something I am missing in the use of our build system for linkage?

I can of course set LD_LIBRARY_PATH in my environment variables but I doubt
it is the best thing to do (especially when I used the proper --enable-berkeleydb
flag at configure time).

-- 
Julien ÉLIE

« – Où vous croyez-vous ici ?
  – Où je me trouve, je sais. » (Astérix)



More information about the inn-workers mailing list