Thread: postgreSQL-8.0.1 configure --enable-thread-safety with icc-8.1 on RHEL-AS3 Itanium-2 gives error
postgreSQL-8.0.1 configure --enable-thread-safety with icc-8.1 on RHEL-AS3 Itanium-2 gives error
From
Vikram Kalsi
Date:
Hi, I am trying to build postgresql-8.0.1 with icc-8.1.028 on a Linux RHEL AS3 SMP Itanium2 machine and I get an error as follows when I run configure --enable-thread-safety as follows- ------------------------------------------------------------------------------------------------------------------------------------ shell>export CC=icc shell>export CFLAGS="-static -fPIC" shell>export LDFLAGS="-L/opt/intel_cc_80/lib" shell>export CPPFLAGS="-I/opt/intel_cc_80/include" shell>configure --prefix=$MY_HOME/dbms/pgsql --enable-thread-safety --disable-shared --with-low-memory --with-pgport=5410 ...... ...... ...... configure:18836: icc -o conftest -static -fPIC -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wold-style-definition -Wendif-labels -fno-strict-aliasing -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -DIN_CONFIGURE -D_GNU_SOURCE -L/opt/intel_cc_80/lib conftest.c -lz -lreadline -ltermcap -lcrypt -lresolv -lnsl -ldl -lm -lbsd >&5 ./src/tools/thread/thread_test.c(75): remark #1418: external definition with no prior declaration char *temp_filename_1; ^ ./src/tools/thread/thread_test.c(76): remark #1418: external definition with no prior declaration char *temp_filename_2; ^ ./src/tools/thread/thread_test.c(78): remark #1418: external definition with no prior declaration pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; ^ ./src/tools/thread/thread_test.c(80): remark #1418: external definition with no prior declaration volatile int thread1_done = 0; ^ ./src/tools/thread/thread_test.c(81): remark #1418: external definition with no prior declaration volatile int thread2_done = 0; ^ ./src/tools/thread/thread_test.c(83): remark #1418: external definition with no prior declaration volatile int errno1_set = 0; ^ ./src/tools/thread/thread_test.c(84): remark #1418: external definition with no prior declaration volatile int errno2_set = 0; ^ ./src/tools/thread/thread_test.c(105): remark #1418: external definition with no prior declaration bool platform_is_threadsafe = true; ^ /tmp/iccQ3B36U.o(.text+0x1d2): In function `main': : undefined reference to `pthread_mutex_lock' /tmp/iccQ3B36U.o(.text+0x202): In function `main': : undefined reference to `pthread_create' /tmp/iccQ3B36U.o(.text+0x232): In function `main': : undefined reference to `pthread_create' /tmp/iccQ3B36U.o(.text+0x2e2): In function `main': : undefined reference to `pthread_mutex_unlock' /tmp/iccQ3B36U.o(.text+0x302): In function `main': : undefined reference to `pthread_join' /tmp/iccQ3B36U.o(.text+0x322): In function `main': : undefined reference to `pthread_join' /tmp/iccQ3B36U.o(.text+0x602): In function `func_call_1': : undefined reference to `pthread_mutex_lock' /tmp/iccQ3B36U.o(.text+0x612): In function `func_call_1': : undefined reference to `pthread_mutex_unlock' /tmp/iccQ3B36U.o(.text+0x872): In function `func_call_2': : undefined reference to `pthread_mutex_lock' /tmp/iccQ3B36U.o(.text+0x882): In function `func_call_2': : undefined reference to `pthread_mutex_unlock' configure:18839: $? = 1 configure: program exited with status 1 configure: failed program was: #line 18830 "configure" #include "confdefs.h" #include "./src/tools/thread/thread_test.c" configure:18853: result: no configure:18863: error: *** Thread test program failed. Your platform is not thread-safe. *** Check the file 'config.log'for the exact reason. *** *** You can use the configure option --enable-thread-safety-force *** to force threads to be enabled. However, you must then run *** the program in src/tools/thread and add locking function calls *** to your applications to guarantee thread safety. ------------------------------------------------------------------------------------------------------------------------------------ The complete log is online at http://www.cse.psu.edu/~kalsi/files2/config.log The same works when I use gcc(3.2.3) and configure also works with icc-8.1 if I dont use --enable-thread-safety! Can anybody see if I am doing it wrong? Any suggestions for resolving this error? Thanks, -Vikram
The Intel compiler complains about global variables that are not marked either static or extern. They are "remarks" so I think you are OK with that. The attached patch should remove the warnings but I am not applying it because a non-static/extern global variable should be fine in C code. The larger problem is that we are not picking up the proper thread flags for the Intel C compiler. Any idea what they are? Please try compiling in src/tools/thread manually to get the flags working and report back. It isn't find the thread library functions like pthread_join. --------------------------------------------------------------------------- Vikram Kalsi wrote: > Hi, > > I am trying to build postgresql-8.0.1 with icc-8.1.028 on a Linux > RHEL AS3 SMP Itanium2 machine and I get an error as follows when I run > configure --enable-thread-safety as follows- > > ------------------------------------------------------------------------------------------------------------------------------------ > shell>export CC=icc > shell>export CFLAGS="-static -fPIC" > shell>export LDFLAGS="-L/opt/intel_cc_80/lib" > shell>export CPPFLAGS="-I/opt/intel_cc_80/include" > > shell>configure --prefix=$MY_HOME/dbms/pgsql --enable-thread-safety > --disable-shared --with-low-memory --with-pgport=5410 > ...... > ...... > ...... > configure:18836: icc -o conftest -static -fPIC -Wall > -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement > -Wold-style-definition -Wendif-labels -fno-strict-aliasing > -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -DIN_CONFIGURE > -D_GNU_SOURCE -L/opt/intel_cc_80/lib conftest.c -lz -lreadline > -ltermcap -lcrypt -lresolv -lnsl -ldl -lm -lbsd >&5 > > ./src/tools/thread/thread_test.c(75): remark #1418: external > definition with no prior declaration > char *temp_filename_1; > ^ > > ./src/tools/thread/thread_test.c(76): remark #1418: external > definition with no prior declaration > char *temp_filename_2; > ^ > > ./src/tools/thread/thread_test.c(78): remark #1418: external > definition with no prior declaration > pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; > ^ > > ./src/tools/thread/thread_test.c(80): remark #1418: external > definition with no prior declaration > volatile int thread1_done = 0; > ^ > > ./src/tools/thread/thread_test.c(81): remark #1418: external > definition with no prior declaration > volatile int thread2_done = 0; > ^ > > ./src/tools/thread/thread_test.c(83): remark #1418: external > definition with no prior declaration > volatile int errno1_set = 0; > ^ > > ./src/tools/thread/thread_test.c(84): remark #1418: external > definition with no prior declaration > volatile int errno2_set = 0; > ^ > > ./src/tools/thread/thread_test.c(105): remark #1418: external > definition with no prior declaration > bool platform_is_threadsafe = true; > ^ > > /tmp/iccQ3B36U.o(.text+0x1d2): In function `main': > : undefined reference to `pthread_mutex_lock' > /tmp/iccQ3B36U.o(.text+0x202): In function `main': > : undefined reference to `pthread_create' > /tmp/iccQ3B36U.o(.text+0x232): In function `main': > : undefined reference to `pthread_create' > /tmp/iccQ3B36U.o(.text+0x2e2): In function `main': > : undefined reference to `pthread_mutex_unlock' > /tmp/iccQ3B36U.o(.text+0x302): In function `main': > : undefined reference to `pthread_join' > /tmp/iccQ3B36U.o(.text+0x322): In function `main': > : undefined reference to `pthread_join' > /tmp/iccQ3B36U.o(.text+0x602): In function `func_call_1': > : undefined reference to `pthread_mutex_lock' > /tmp/iccQ3B36U.o(.text+0x612): In function `func_call_1': > : undefined reference to `pthread_mutex_unlock' > /tmp/iccQ3B36U.o(.text+0x872): In function `func_call_2': > : undefined reference to `pthread_mutex_lock' > /tmp/iccQ3B36U.o(.text+0x882): In function `func_call_2': > : undefined reference to `pthread_mutex_unlock' > configure:18839: $? = 1 > configure: program exited with status 1 > configure: failed program was: > #line 18830 "configure" > #include "confdefs.h" > #include "./src/tools/thread/thread_test.c" > configure:18853: result: no > configure:18863: error: > *** Thread test program failed. Your platform is not thread-safe. > *** Check the file 'config.log'for the exact reason. > *** > *** You can use the configure option --enable-thread-safety-force > *** to force threads to be enabled. However, you must then run > *** the program in src/tools/thread and add locking function calls > *** to your applications to guarantee thread safety. > ------------------------------------------------------------------------------------------------------------------------------------ > The complete log is online at http://www.cse.psu.edu/~kalsi/files2/config.log > > The same works when I use gcc(3.2.3) and configure also works with > icc-8.1 if I dont use --enable-thread-safety! > > Can anybody see if I am doing it wrong? Any suggestions for resolving > this error? > > Thanks, > -Vikram > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/tools/thread/thread_test.c =================================================================== RCS file: /cvsroot/pgsql/src/tools/thread/thread_test.c,v retrieving revision 1.36 diff -c -c -r1.36 thread_test.c *** src/tools/thread/thread_test.c 31 Dec 2004 22:04:02 -0000 1.36 --- src/tools/thread/thread_test.c 9 Mar 2005 04:19:09 -0000 *************** *** 66,108 **** /* This must be down here because this is the code that uses threads. */ #include <pthread.h> ! void func_call_1(void); ! void func_call_2(void); #define TEMP_FILENAME_1 "/tmp/thread_test.1.XXXXXX" #define TEMP_FILENAME_2 "/tmp/thread_test.2.XXXXXX" ! char *temp_filename_1; ! char *temp_filename_2; ! pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; ! volatile int thread1_done = 0; ! volatile int thread2_done = 0; ! volatile int errno1_set = 0; ! volatile int errno2_set = 0; #ifndef HAVE_STRERROR_R ! char *strerror_p1; ! char *strerror_p2; ! bool strerror_threadsafe = false; #endif #ifndef HAVE_GETPWUID_R ! struct passwd *passwd_p1; ! struct passwd *passwd_p2; ! bool getpwuid_threadsafe = false; #endif #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R) ! struct hostent *hostent_p1; ! struct hostent *hostent_p2; ! char myhostname[MAXHOSTNAMELEN]; ! bool gethostbyname_threadsafe = false; #endif ! bool platform_is_threadsafe = true; int main(int argc, char *argv[]) --- 66,108 ---- /* This must be down here because this is the code that uses threads. */ #include <pthread.h> ! static void func_call_1(void); ! static void func_call_2(void); #define TEMP_FILENAME_1 "/tmp/thread_test.1.XXXXXX" #define TEMP_FILENAME_2 "/tmp/thread_test.2.XXXXXX" ! static char *temp_filename_1; ! static char *temp_filename_2; ! static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; ! static volatile int thread1_done = 0; ! static volatile int thread2_done = 0; ! static volatile int errno1_set = 0; ! static volatile int errno2_set = 0; #ifndef HAVE_STRERROR_R ! static char *strerror_p1; ! static char *strerror_p2; ! static bool strerror_threadsafe = false; #endif #ifndef HAVE_GETPWUID_R ! static struct passwd *passwd_p1; ! static struct passwd *passwd_p2; ! static bool getpwuid_threadsafe = false; #endif #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R) ! static struct hostent *hostent_p1; ! static struct hostent *hostent_p2; ! static char myhostname[MAXHOSTNAMELEN]; ! static bool gethostbyname_threadsafe = false; #endif ! static bool platform_is_threadsafe = true; int main(int argc, char *argv[]) *************** *** 230,236 **** } } ! void func_call_1(void) { #if !defined(HAVE_GETPWUID_R) || \ --- 230,236 ---- } } ! static void func_call_1(void) { #if !defined(HAVE_GETPWUID_R) || \ *************** *** 301,307 **** } ! void func_call_2(void) { #if !defined(HAVE_GETPWUID_R) || \ --- 301,307 ---- } ! static void func_call_2(void) { #if !defined(HAVE_GETPWUID_R) || \
Bruce Momjian wrote: > The attached patch should remove the warnings but I am not applying it > because a non-static/extern global variable should be fine in C code. What's the harm in applying it? Variables and functions not used outside the compilation unit in which they are defined _should_ be marked static; it's not required, but I think it's good style. -Neil
Re: postgreSQL-8.0.1 configure --enable-thread-safety with icc-8.1 on RHEL-AS3 Itanium-2 gives error
From
Vikram Kalsi
Date:
I was ignoring the warnings anyway. I didn't look into that much but after upgrading to RHEL AS4, I am able to compile successfully with --enable-thread-safety Thanks, On Tue, 8 Mar 2005 23:28:20 -0500 (EST), Bruce Momjian <pgman@candle.pha.pa.us> wrote: > > The Intel compiler complains about global variables that are not marked > either static or extern. They are "remarks" so I think you are OK with > that. > > The attached patch should remove the warnings but I am not applying it > because a non-static/extern global variable should be fine in C code. > > The larger problem is that we are not picking up the proper thread flags > for the Intel C compiler. Any idea what they are? Please try compiling > in src/tools/thread manually to get the flags working and report back. > It isn't find the thread library functions like pthread_join. > > --------------------------------------------------------------------------- > > Vikram Kalsi wrote: > > Hi, > > > > I am trying to build postgresql-8.0.1 with icc-8.1.028 on a Linux > > RHEL AS3 SMP Itanium2 machine and I get an error as follows when I run > > configure --enable-thread-safety as follows- > > > > ------------------------------------------------------------------------------------------------------------------------------------ > > shell>export CC=icc > > shell>export CFLAGS="-static -fPIC" > > shell>export LDFLAGS="-L/opt/intel_cc_80/lib" > > shell>export CPPFLAGS="-I/opt/intel_cc_80/include" > > > > shell>configure --prefix=$MY_HOME/dbms/pgsql --enable-thread-safety > > --disable-shared --with-low-memory --with-pgport=5410 > > ...... > > ...... > > ...... > > configure:18836: icc -o conftest -static -fPIC -Wall > > -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement > > -Wold-style-definition -Wendif-labels -fno-strict-aliasing > > -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -DIN_CONFIGURE > > -D_GNU_SOURCE -L/opt/intel_cc_80/lib conftest.c -lz -lreadline > > -ltermcap -lcrypt -lresolv -lnsl -ldl -lm -lbsd >&5 > > > > ./src/tools/thread/thread_test.c(75): remark #1418: external > > definition with no prior declaration > > char *temp_filename_1; > > ^ > > > > ./src/tools/thread/thread_test.c(76): remark #1418: external > > definition with no prior declaration > > char *temp_filename_2; > > ^ > > > > ./src/tools/thread/thread_test.c(78): remark #1418: external > > definition with no prior declaration > > pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; > > ^ > > > > ./src/tools/thread/thread_test.c(80): remark #1418: external > > definition with no prior declaration > > volatile int thread1_done = 0; > > ^ > > > > ./src/tools/thread/thread_test.c(81): remark #1418: external > > definition with no prior declaration > > volatile int thread2_done = 0; > > ^ > > > > ./src/tools/thread/thread_test.c(83): remark #1418: external > > definition with no prior declaration > > volatile int errno1_set = 0; > > ^ > > > > ./src/tools/thread/thread_test.c(84): remark #1418: external > > definition with no prior declaration > > volatile int errno2_set = 0; > > ^ > > > > ./src/tools/thread/thread_test.c(105): remark #1418: external > > definition with no prior declaration > > bool platform_is_threadsafe = true; > > ^ > > > > /tmp/iccQ3B36U.o(.text+0x1d2): In function `main': > > : undefined reference to `pthread_mutex_lock' > > /tmp/iccQ3B36U.o(.text+0x202): In function `main': > > : undefined reference to `pthread_create' > > /tmp/iccQ3B36U.o(.text+0x232): In function `main': > > : undefined reference to `pthread_create' > > /tmp/iccQ3B36U.o(.text+0x2e2): In function `main': > > : undefined reference to `pthread_mutex_unlock' > > /tmp/iccQ3B36U.o(.text+0x302): In function `main': > > : undefined reference to `pthread_join' > > /tmp/iccQ3B36U.o(.text+0x322): In function `main': > > : undefined reference to `pthread_join' > > /tmp/iccQ3B36U.o(.text+0x602): In function `func_call_1': > > : undefined reference to `pthread_mutex_lock' > > /tmp/iccQ3B36U.o(.text+0x612): In function `func_call_1': > > : undefined reference to `pthread_mutex_unlock' > > /tmp/iccQ3B36U.o(.text+0x872): In function `func_call_2': > > : undefined reference to `pthread_mutex_lock' > > /tmp/iccQ3B36U.o(.text+0x882): In function `func_call_2': > > : undefined reference to `pthread_mutex_unlock' > > configure:18839: $? = 1 > > configure: program exited with status 1 > > configure: failed program was: > > #line 18830 "configure" > > #include "confdefs.h" > > #include "./src/tools/thread/thread_test.c" > > configure:18853: result: no > > configure:18863: error: > > *** Thread test program failed. Your platform is not thread-safe. > > *** Check the file 'config.log'for the exact reason. > > *** > > *** You can use the configure option --enable-thread-safety-force > > *** to force threads to be enabled. However, you must then run > > *** the program in src/tools/thread and add locking function calls > > *** to your applications to guarantee thread safety. > > ------------------------------------------------------------------------------------------------------------------------------------ > > The complete log is online at http://www.cse.psu.edu/~kalsi/files2/config.log > > > > The same works when I use gcc(3.2.3) and configure also works with > > icc-8.1 if I dont use --enable-thread-safety! > > > > Can anybody see if I am doing it wrong? Any suggestions for resolving > > this error? > > > > Thanks, > > -Vikram > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 6: Have you searched our list archives? > > > > http://archives.postgresql.org > > > > -- > Bruce Momjian | http://candle.pha.pa.us > pgman@candle.pha.pa.us | (610) 359-1001 > + If your life is a hard drive, | 13 Roberts Road > + Christ can be your backup. | Newtown Square, Pennsylvania 19073 > > > Index: src/tools/thread/thread_test.c > =================================================================== > RCS file: /cvsroot/pgsql/src/tools/thread/thread_test.c,v > retrieving revision 1.36 > diff -c -c -r1.36 thread_test.c > *** src/tools/thread/thread_test.c 31 Dec 2004 22:04:02 -0000 1.36 > --- src/tools/thread/thread_test.c 9 Mar 2005 04:19:09 -0000 > *************** > *** 66,108 **** > /* This must be down here because this is the code that uses threads. */ > #include <pthread.h> > > ! void func_call_1(void); > ! void func_call_2(void); > > #define TEMP_FILENAME_1 "/tmp/thread_test.1.XXXXXX" > #define TEMP_FILENAME_2 "/tmp/thread_test.2.XXXXXX" > > ! char *temp_filename_1; > ! char *temp_filename_2; > > ! pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; > > ! volatile int thread1_done = 0; > ! volatile int thread2_done = 0; > > ! volatile int errno1_set = 0; > ! volatile int errno2_set = 0; > > #ifndef HAVE_STRERROR_R > ! char *strerror_p1; > ! char *strerror_p2; > ! bool strerror_threadsafe = false; > #endif > > #ifndef HAVE_GETPWUID_R > ! struct passwd *passwd_p1; > ! struct passwd *passwd_p2; > ! bool getpwuid_threadsafe = false; > #endif > > #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R) > ! struct hostent *hostent_p1; > ! struct hostent *hostent_p2; > ! char myhostname[MAXHOSTNAMELEN]; > ! bool gethostbyname_threadsafe = false; > #endif > > ! bool platform_is_threadsafe = true; > > int > main(int argc, char *argv[]) > --- 66,108 ---- > /* This must be down here because this is the code that uses threads. */ > #include <pthread.h> > > ! static void func_call_1(void); > ! static void func_call_2(void); > > #define TEMP_FILENAME_1 "/tmp/thread_test.1.XXXXXX" > #define TEMP_FILENAME_2 "/tmp/thread_test.2.XXXXXX" > > ! static char *temp_filename_1; > ! static char *temp_filename_2; > > ! static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; > > ! static volatile int thread1_done = 0; > ! static volatile int thread2_done = 0; > > ! static volatile int errno1_set = 0; > ! static volatile int errno2_set = 0; > > #ifndef HAVE_STRERROR_R > ! static char *strerror_p1; > ! static char *strerror_p2; > ! static bool strerror_threadsafe = false; > #endif > > #ifndef HAVE_GETPWUID_R > ! static struct passwd *passwd_p1; > ! static struct passwd *passwd_p2; > ! static bool getpwuid_threadsafe = false; > #endif > > #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R) > ! static struct hostent *hostent_p1; > ! static struct hostent *hostent_p2; > ! static char myhostname[MAXHOSTNAMELEN]; > ! static bool gethostbyname_threadsafe = false; > #endif > > ! static bool platform_is_threadsafe = true; > > int > main(int argc, char *argv[]) > *************** > *** 230,236 **** > } > } > > ! void > func_call_1(void) > { > #if !defined(HAVE_GETPWUID_R) || \ > --- 230,236 ---- > } > } > > ! static void > func_call_1(void) > { > #if !defined(HAVE_GETPWUID_R) || \ > *************** > *** 301,307 **** > } > > ! void > func_call_2(void) > { > #if !defined(HAVE_GETPWUID_R) || \ > --- 301,307 ---- > } > > ! static void > func_call_2(void) > { > #if !defined(HAVE_GETPWUID_R) || \ > > >
Neil Conway wrote: > Bruce Momjian wrote: > > The attached patch should remove the warnings but I am not applying it > > because a non-static/extern global variable should be fine in C code. > > What's the harm in applying it? Variables and functions not used outside > the compilation unit in which they are defined _should_ be marked > static; it's not required, but I think it's good style. I didn't want to do it because I thought we would then have to do it in a lot of places, but I see pg_ctl.c does it, so I applied the patch, and fixed initdb.c to be 'static-clean' too. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
BVikram Kalsi wrote: > I was ignoring the warnings anyway. > > I didn't look into that much but after upgrading to RHEL AS4, I am > able to compile successfully with --enable-thread-safety OK, so there was some problem with AS3 and its use of the thread library. Glad it is working now. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073