On Fri, Jan 27, 2012 at 5:34 AM, Jeff Squyres <[email protected]> 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 [email protected]
Future Technologies Group
HPC Research Department Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory Fax: +1-510-486-6900