[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Possible problem with LT 2.2

From: Jeff Squyres
Subject: Possible problem with LT 2.2
Date: Fri, 14 Mar 2008 19:35:39 -0400


I noticed an odd problem earlier today when building the Open MPI development trunk from subversion on a Linux RHEL4U4 system (x86_64) with gcc and LT 2.2, AM 1.10, and AC 2.61.

A little background:

- Open MPI is based on plugins. We use libltdl to lt_dlopen() various types of plugins. One type of plugin is called "btl" (byte transfer layer), which loosely translates to what kind of network you're using.

- The default Open MPI build is to create shared libraries (libmpi.so) and build the plugins as DSOs (e.g., mca_btl_tcp.so). However, if OMPI's configure script detects "--enable-static --disable-shared", it will instead build all the plugins as convenience libraries and include them in libmpi.a.

- The default build is working fine. But when I manually configure with --enable-static --disable shared, I'm getting a missing symbols error when trying to link an executable that links against libmpi.a.

- The missing symbols are originating from the SCTP BTL plugin. The SCTP plugin has a dependency against the sctp library (I have both libsctp.so and libsctp.a on my system). When mca_btl_sctp.la is created, it contains the following line:

    dependency_libs=' /usr/lib64/libsctp.la -lnsl -lutil -lm'

- mca_btl_sctp.la is then sucked into libmpi.la via libmpi_la_LIBADD. However, its dependency_libs value seems to be missing any mention of the libsctp dependency:

dependency_libs=' -libverbs -lrt /users/jsquyres/svn/ompi2/orte/ libopen-rte.la users/jsquyres/svn/ompi2/opal/libopen-pal.la -lnuma - ldl -lnsl -lutil -lm'

(all the other entries in there look good)

- It seems to directly follow that when I try to link an executable against libmpi.a (more specifically, libmpi.la is in the executable's LDADD), it can't find some symbols that exist in libsctp.a and the link fails.

- Here's the libtool link command that generates mca_btl_sctp.la:

libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../../../opal/include - I../../../../orte/include -I../../../../ompi/include -I../../../../ opal/mca/paffinity/linux/plpa/src/libplpa -I../../../.. -g -Wall - Wundef -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wstrict- prototypes -Wcomment -pedantic -Werror-implicit-function-declaration - finline-functions -fno-strict-aliasing -pthread -MT btl_sctp_utils.lo - MD -MP -MF .deps/btl_sctp_utils.Tpo -c btl_sctp_utils.c -fPIC -DPIC - o .libs/btl_sctp_utils.o /bin/sh ../../../../libtool --tag=CC --mode=link gcc -g -Wall - Wundef -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wstrict- prototypes -Wcomment -pedantic -Werror-implicit-function-declaration - finline-functions -fno-strict-aliasing -pthread -module -avoid- version -export-dynamic -o mca_btl_sctp.la -rpath /home/jsquyres/ bogus/lib/openmpi btl_sctp.lo btl_sctp_component.lo btl_sctp_endpoint.lo btl_sctp_frag.lo btl_sctp_proc.lo btl_sctp_recv_handler.lo btl_sctp_utils.lo -lsctp -lnsl -lutil -lm libtool: link: gcc -shared .libs/btl_sctp.o .libs/ btl_sctp_component.o .libs/btl_sctp_endpoint.o .libs/ btl_sctp_frag.o .libs/btl_sctp_proc.o .libs/ btl_sctp_recv_handler.o .libs/btl_sctp_utils.o -Wl,-rpath -Wl,/usr/ lib64 -Wl,-rpath -Wl,/usr/lib64 /usr/lib64/libsctp.so -lnsl -lutil - lm -pthread -pthread -Wl,-soname -Wl,mca_btl_sctp.so -o .libs/ mca_btl_sctp.so
libtool: link: creating mca_btl_sctp.la
libtool: link: ( cd ".libs" && rm -f "mca_btl_sctp.la" && ln -s "../ mca_btl_sctp.la" "mca_btl_sctp.la" )

- Per request from Ralf W., I ran the libtool command manually, but with --debug as the first argument. It's unfortunately not much more information:

% /bin/sh --debug ../../../../libtool --tag=CC --mode=link gcc -g - Wall -Wundef -Wno-long-long -Wsign-compare -Wmissing-prototypes - Wstrict-prototypes -Wcomment -pedantic -Werror-implicit-function- declaration -finline-functions -fno-strict-aliasing -pthread -module - avoid-version -export-dynamic -o mca_btl_sctp.la -rpath /home/jsquyres/ bogus/lib/openmpi btl_sctp.lo btl_sctp_component.lo btl_sctp_endpoint.lo btl_sctp_frag.lo btl_sctp_proc.lo btl_sctp_recv_handler.lo btl_sctp_utils.lo -lsctp -lnsl -lutil -lm | & tee lt-debug.out libtool: link: rm -fr .libs/mca_btl_sctp.a .libs/ mca_btl_sctp.la .libs/mca_btl_sctp.lai libtool: link: ar cru .libs/mca_btl_sctp.a btl_sctp.o btl_sctp_component.o btl_sctp_endpoint.o btl_sctp_frag.o btl_sctp_proc.o btl_sctp_recv_handler.o btl_sctp_utils.o
libtool: link: ranlib .libs/mca_btl_sctp.a
libtool: link: ( cd ".libs" && rm -f "mca_btl_sctp.la" && ln -s "../ mca_btl_sctp.la" "mca_btl_sctp.la" )

- The command to create libmpi.a is extremely long, so I included it in an attachment. More specifically, I have attached the following: - Full output from configure (I doubt it will help, but more information is better than less; you can see the checks for libsctp in the middle)
  - The resulting config.log file
- Full output from make (the building of mca_btl_sctp.la is buried in the middle)
  - Output from ./libtool --config
  - Output from ./libtool --config --tag=CC

Any ideas what the problem could be here?

Please let me know if I can provide any further information.  Thanks!

Jeff Squyres
Cisco Systems

Attachment: lt22-possible-bug.tar.bz2
Description: Binary data

reply via email to

[Prev in Thread] Current Thread [Next in Thread]