[Cluster-devel] [PATCH] Avoid link failure...

Steven Dake sdake at redhat.com
Sat Jun 20 16:23:43 UTC 2009


On Sat, 2009-06-20 at 14:32 +0200, Fabio M. Di Nitto wrote:
> Hi Jim,
> 
> On Fri, 2009-06-19 at 19:19 +0200, Jim Meyering wrote:
> > When building from sources (master.git), against just-installed-to-
> > private hierarchy headers/libs from corosync and openais, I get this
> > failure:
> > 
> > libtool: link: gcc -I/p/p/coro/include -g -O2 -O2 -ggdb3 -Wall -Wshadow -Wmissin
> > g-prototypes -Wmissing-declarations -Wstrict-prototypes -Wdeclaration-after-stat
> > ement -Wpointer-arith -Wwrite-strings -Wcast-align -Wbad-function-cast -Wmissing
> > -format-attribute -Wformat=2 -Wformat-security -Wformat-nonliteral -Wno-long-lon
> > g -Wno-strict-aliasing -o confdb2ldif confdb2ldif-confdb2ldif.o  -L/p/p/coro/lib
> >  -lconfdb
> > /usr/bin/ld: warning: libcoroipcc.so.4, needed by /p/p/coro/lib/libconfdb.so, no
> > t found (try using -rpath or -rpath-link)
> > /p/p/coro/lib/libconfdb.so: undefined reference to `coroipcc_fd_get at COROSYNC_COR
> > OIPCC_3.0'
> > /p/p/coro/lib/libconfdb.so: undefined reference to `coroipcc_dispatch_get'
> > /p/p/coro/lib/libconfdb.so: undefined reference to `coroipcc_dispatch_put'
> > /p/p/coro/lib/libconfdb.so: undefined reference to `coroipcc_service_connect at COR
> > OSYNC_COROIPCC_3.0'
> > /p/p/coro/lib/libconfdb.so: undefined reference to `coroipcc_msg_send_reply_rece
> > ive at COROSYNC_COROIPCC_3.0'
> > /p/p/coro/lib/libconfdb.so: undefined reference to `coroipcc_service_disconnect@
> > COROSYNC_COROIPCC_3.0'
> > collect2: ld returned 1 exit status
> > make[3]: *** [confdb2ldif] Error 1
> > make[3]: Leaving directory `/h/meyering/w/co/cluster/config/tools/ldap'
> > make[2]: *** [all-recursive] Error 1
> > make[2]: Leaving directory `/h/meyering/w/co/cluster/config/tools'
> > make[1]: *** [all-recursive] Error 1
> > make[1]: Leaving directory `/h/meyering/w/co/cluster/config'
> > make: *** [all-recursive] Error 1
> > [Exit 2]
> 
> I am able to reproduce this error, but there is something that I don't
> like about it.
> 
> When installing in different prefixes, isn't the user supposed to update
> LD_LIBRARY_PATH accordingly?
> 
> Once I set LD_LIBRARY_PATH to include the new prefix, this error doesn't
> show because the linker can find libcoroipcc.
> 
> ldap config doesn't use any symbol from coroipcc directly, but only via
> libconfdb that is correctly linked.
> 
> I don't believe that linking ldap tools with coroipcc is the right
> solution, but I am ready to be proven wrong tho.
> 
> In any case, if we really need to link manually with coroipcc, can we
> use PKG_CONFIG rather than manual linking?
> 

Using the rpath-link linker option passed via gcc when the link path is
not ld.so.conf (or using all the time) would probably solve this
problem.  Another option is LD_LIBRARY_PATH override during build.

The root of the problem is confdb links internally to coroipcc.so.  When
the gnu linker finds one of these internal dependencies, it immediately
adds it internally to the list of objects to link to.  If it can't find
the object, the symbols will not be found.

The problem with rpath-link is it is not portable and only works with
gnu linkers so it is difficult to add it directly to the pkgconfig in
corosync until we sort out libtool.

Regards
-steve

> Thanks
> Fabio
> 




More information about the Cluster-devel mailing list