[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
PHHargrove@lbl.gov
Future Technologies Group
HPC Research Department Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory Fax: +1-510-486-6900