On Fri, Jan 27, 2012 at 5:34 AM, Jeff Squyres <jsquy...@cisco.com> wrote: [snip] > > > I'm not quite sure how that can happen -- orte_odls appears to be > prototyped properly in orte/mca/odls/odls.h (i.e., it has ORTE_DECLSPEC, > for visibility), and is properly instantiated in > orte/mca/odls/base/odls_base_open.c. > > Paul: can you run some nm's and see how the orte_odls symbol appears in > libopen-rte.a? > >
In the PGI build directory: > $ find . -name '*.a' | while read lib; do > out=`nm $lib 2>/dev/null | grep -w _orte_odls`; > test -n "$out" && echo -e "${lib}:\n${out}"; > done > ./orte/.libs/libopen-rte.a: > U _orte_odls > U _orte_odls > U _orte_odls > 0000000000000038 C _orte_odls > U _orte_odls > U _orte_odls > ./orte/mca/errmgr/.libs/libmca_errmgr.a: > U _orte_odls > ./orte/mca/odls/.libs/libmca_odls.a: > 0000000000000038 C _orte_odls > U _orte_odls > ./orte/mca/plm/.libs/libmca_plm.a: > U _orte_odls Meanwhile in the GCC build directory the same shell command yields something quite different: > ./orte/mca/errmgr/.libs/libmca_errmgr.a: > U _orte_odls > ./orte/mca/odls/.libs/libmca_odls.a: > 00000000000011c0 S _orte_odls > U _orte_odls > ./orte/mca/plm/.libs/libmca_plm.a: > U _orte_odls So the difference boils down to "C" vs "S". According to "man nm" on this system "C" is "common" "S" is "other section not listed above" I don't know much about visibility attributes and so can't follow the path any further without some instructions to follow. (Though I will read the PGI manpages for anything related to common vs noncommon symbols). Hopefully those are the droids you're looking for, -Paul -- Paul H. Hargrove phhargr...@lbl.gov Future Technologies Group HPC Research Department Tel: +1-510-495-2352 Lawrence Berkeley National Laboratory Fax: +1-510-486-6900