On 2/10/2012 9:27 AM, Paul H. Hargrove wrote:
I have versions 8.1.032, 9.0.024 and 9.1.042 of the Intel compilers on
a Linux/x86 (32-bit) host.
All three can configure and build hwloc-1.3.2rc1, but all are failing
"make check" in the same way.
What I see is ton(ne)s of linker messages and every executable SEGVs.
The linker messages look like:
CC hwloc_synthetic.o
CCLD hwloc_synthetic
ld: hwloc_synthetic.o(.text+0x1c): unresolvable relocation against
symbol `hwloc_topology_init'
ld: hwloc_synthetic.o(.text+0x2a): unresolvable relocation against
symbol `hwloc_topology_set_synthetic'
ld: hwloc_synthetic.o(.text+0x33): unresolvable relocation against
symbol `hwloc_topology_load'
ld: hwloc_synthetic.o(.text+0x3c): unresolvable relocation against
symbol `hwloc_topology_check'
ld: hwloc_synthetic.o(.text+0x46): unresolvable relocation against
symbol `hwloc_topology_get_depth'
ld: hwloc_synthetic.o(.text+0x64): unresolvable relocation against
symbol `hwloc_get_nbobjs_by_depth'
ld: hwloc_synthetic.o(.text+0x8a): unresolvable relocation against
symbol `hwloc_get_obj_by_depth'
ld: hwloc_synthetic.o(.text+0xc6): unresolvable relocation against
symbol `hwloc_topology_destroy'
Where most tests have far more of these.
For the moment, I am going to assume the SEGVs are a result of the
linker problems.
As compared to gcc on the same system, the only difference in
include/private/autogen/config.h is:
/* Whether C compiler supports symbol visibility or not */
-#define HWLOC_C_HAVE_VISIBILITY 1
+#define HWLOC_C_HAVE_VISIBILITY 0
Where the '1' is the build with the Intel compiler.
So, my current suspicion falls on the visibility crud.
I can confirm that "HWLOC_CFLAGS = -fvisibility=hidden" in Makefile.
Other then that, I don't know where to begin looking at this problem.
-Paul
For comparison, tried building the OMPI 1.4.5rc5 with these Intel compilers.
icc-9.1.042: caused assertion failure in ld - let not consider this one
icc-9.0.024: PASSed "make all install check clean"
icc-8.1.032: PASSed "make all install check clean"
So, I believe that the two PASS results shows that the correct
visibility logic is "known" in ompi.
The key difference appears to be that ompi has decided NOT to use
-fvisibility with these compilers:
============================================================================
== Symbol Visibility Feature
============================================================================
checking if icc supports -fvisibility... no
checking enable symbol visibility... no
And from the ompi-1.4.5rc5 config.log:
configure:164594: checking if icc supports -fvisibility
configure:164624: icc -o conftest -O3 -DNDEBUG -finline-functions
-fno-strict-aliasing -restrict -pthread -fvisibility=hidden
conftest.c -lnsl -lutil >&5
/tmp/iccFBKDBg.o: In function `bar':
conftest.c:(.text+0x26): undefined reference to `fputs'
ld: conftest: hidden symbol `fputs' isn't defined
ld: final link failed: Nonrepresentable section on output
configure:164631: $? = 1
As compared to hwloc-1.3.2rc1:
configure:8253: checking if icc supports -fvisibility
configure:8268: icc -o conftest -fvisibility=hidden -Werror
conftest.c >&5
configure:8268: $? = 0
configure:8279: result: yes
So, my educated guess is that one needs to (back)port the configure
logic for visibility support.
-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