The following error did *not* occur on the same system with the previous RC.

I have configured 1.10.3rc3 on a normal x86-64/Linux system with:
   --prefix=[...] --enable-debug --enable-static --disable-shared

When I try to use the resulting build to compile the examples:

$ make -k
mpicc -g    hello_c.c   -o hello_c
mpicc -g    ring_c.c   -o ring_c
mpicc -g    connectivity_c.c   -o connectivity_c
make[1]: Entering directory
`/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/BLD/examples'
make[2]: Entering directory
`/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/BLD/examples'
mpic++ -g    hello_cxx.cc   -o hello_cxx
mpic++ -g    ring_cxx.cc   -o ring_cxx
make[2]: Leaving directory
`/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/BLD/examples'
make[2]: Entering directory
`/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/BLD/examples'
mpifort -g hello_mpifh.f -o hello_mpifh
/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/INST/lib/libmpi.a(ompi_mpi_init.o):
In function `ompi_warn_fork':
ompi_mpi_init.c:(.text+0x282): undefined reference to `pthread_atfork'
/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/INST/lib/libopen-pal.a(lt1-malloc.o):
In function `ptmalloc_init':
malloc.c:(.text+0x5f3): undefined reference to `pthread_atfork'
collect2: error: ld returned 1 exit status
make[2]: *** [hello_mpifh] Error 1
mpifort -g ring_mpifh.f -o ring_mpifh
/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/INST/lib/libmpi.a(ompi_mpi_init.o):
In function `ompi_warn_fork':
ompi_mpi_init.c:(.text+0x282): undefined reference to `pthread_atfork'
/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/INST/lib/libopen-pal.a(lt1-malloc.o):
In function `ptmalloc_init':
malloc.c:(.text+0x5f3): undefined reference to `pthread_atfork'
collect2: error: ld returned 1 exit status
make[2]: *** [ring_mpifh] Error 1
make[2]: Leaving directory
`/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/BLD/examples'
make[1]: *** [mpi] Error 2
make[1]: Leaving directory
`/scratch/phargrov/OMPI/openmpi-1.10.3rc3-linux-x86_64-static/BLD/examples'
make: *** [all] Error 2

Comparing the configure output from RC2 and RC3 is informative:

 checking if word-sized integers must be word-size aligned... no
 checking if C compiler and POSIX threads work as is... no
 checking if C++ compiler and POSIX threads work as is... no
-checking if Fortran compiler and POSIX threads work as is... no
+checking if Fortran compiler and POSIX threads work as is... yes
 checking if C compiler and POSIX threads work with -Kthread... no
 checking if C compiler and POSIX threads work with -kthread... no
 checking if C compiler and POSIX threads work with -pthread... yes
 checking if C++ compiler and POSIX threads work with -Kthread... no
 checking if C++ compiler and POSIX threads work with -kthread... no
 checking if C++ compiler and POSIX threads work with -pthread... yes
-checking if Fortran compiler and POSIX threads work with -Kthread... no
-checking if Fortran compiler and POSIX threads work with -kthread... no
-checking if Fortran compiler and POSIX threads work with -pthread... yes
 checking for pthread_mutexattr_setpshared... yes
 checking for pthread_condattr_setpshared... yes
 checking for PTHREAD_MUTEX_ERRORCHECK_NP... yes


So, while RC2's configure determined that Fortran+pthreads needed -pthread,
it appears that RC3 has instead determined that Fortran+pthreads "work as
is".

Here is the related portion of config.log from RC2:

configure:63400: checking if Fortran compiler and POSIX threads work as is
configure:63481: gcc -std=gnu99 -g -finline-functions -fno-strict-aliasing
-I. -c conftest.c
conftest.c: In function 'pthreadtest_f':
conftest.c:27:5: warning: passing argument 1 of 'pthread_join' makes
integer from pointer without a cast
     pthread_join(&newthread, 0);
     ^
In file included from conftest.c:3:0:
/usr/include/pthread.h:242:12: note: expected 'pthread_t' but argument is
of type 'pthread_t *'
 extern int pthread_join (pthread_t __th, void **__thread_return);
            ^
configure:63488: $? = 0
configure:63498: gfortran -g conftestf.f conftest.o -o conftest  -lm -lutil
conftest.o: In function `pthreadtest_f':
conftest.c:(.text+0xa8): undefined reference to `__pthread_register_cancel'
conftest.c:(.text+0xc3): undefined reference to `pthread_create'
conftest.c:(.text+0xd5): undefined reference to `pthread_join'
conftest.c:(.text+0xe4): undefined reference to
`__pthread_unregister_cancel'
collect2: error: ld returned 1 exit status
configure:63505: $? = 1


And here it is for RC3:

configure:63623: checking if Fortran compiler and POSIX threads work as is
configure:63704: gcc -std=gnu99 -g -finline-functions -fno-strict-aliasing
-I. -c conftest.c
conftest.c: In function 'pthreadtest_f':
conftest.c:27:5: warning: passing argument 1 of 'pthread_join' makes
integer from pointer without a cast
     pthread_join(&newthread, 0);
     ^
In file included from conftest.c:3:0:
/usr/include/pthread.h:242:12: note: expected 'pthread_t' but argument is
of type 'pthread_t *'
 extern int pthread_join (pthread_t __th, void **__thread_return);
            ^
configure:63711: $? = 0
configure:63721: gfortran -g conftestf.f conftest.o -o conftest  -lrt -lm
-lutil
configure:63728: $? = 0
configure:63802: result: yes


It appears that the only important difference here is that "-lrt" has now
appeared on the gfortran link line (which I assume pulls in libpthread).
This "-lrt" appears to be the result of the new probe for clock_gettime().

I am not sure exactly what breaks down after that.

-Paul

-- 
Paul H. Hargrove                          phhargr...@lbl.gov
Computer Languages & Systems Software (CLaSS) Group
Computer Science Department               Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900

Reply via email to