From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21046 invoked by alias); 7 Aug 2003 12:47:50 -0000 Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org Received: (qmail 21011 invoked from network); 7 Aug 2003 12:47:46 -0000 Received: from unknown (HELO npmail.np-gmbh.com) (213.157.7.2) by sources.redhat.com with SMTP; 7 Aug 2003 12:47:46 -0000 Subject: Threadiing Problems on AIX 4.3.3 ML-11 with gcc 3.2.3 (g++) To: gcc-help@gcc.gnu.org Message-ID: From: Markus.Schaeffer@np-gmbh.com Date: Thu, 07 Aug 2003 12:47:00 -0000 MIME-Version: 1.0 Content-type: text/plain; charset=us-ascii X-SW-Source: 2003-08/txt/msg00059.txt.bz2 Hello folks, > I assume you mean that you are using the native AIX linker, but >invoking "g++" to perform the link, not invoking "ld" directly. >Otherwise, using "-Wl," in the LDFLAGS could not possibly work. Yes indeed. > Why are you adding "-fexceptions"? The GNU C++ Compiler defaults > to exceptions on. This is CXXFLAGS, not CFLAGS. At the moment I'am not shure that threads are the trouble makers. ### Because an ldd gives the following info: $ ldd ./server /usr/lib/librtl.a(shr.o) /usr/lib/libdl.a(shr.o) /pkg/dev01/tools/compiler/gcc/lib/libgcc_s_pthread.a(shr.o) -> Is this a static lib? Are there problems with exception handling? /pkg/dev01/tools/compiler/gcc/lib/libgcc_s.a(shr.o) -> "" "" Thers's another lib in gcc libgcc_eh.a eh -> exception handling/invoked by -shared-libgcc /pkg/dev01/tools/compiler/gcc/lib/libstdc++.a(libstdc++.so.5) /usr/lib/libpthreads.a(shr.o) /usr/lib/libpthreads_compat.a(shr.o) /usr/lib/libcrypt.a(shr.o) /usr/lib/libc.a(shr.o) /usr/lib/libpthreads.a(shr_comm.o) /usr/lib/libpthreads.a(shr_xpg5.o) /tmp/MS/0.07/libbase/aix/xerces/libxerces-c1_6_0.a ./server $ And ldd of my shared lib gives me the following: $ ldd ./libserviceconnectorarchive.a /pkg/dev01/tools/compiler/gcc/lib/libgcc_s_pthread.a(shr.o) /pkg/dev01/tools/compiler/gcc/lib/libgcc_s.a(shr.o) /pkg/dev01/tools/compiler/gcc/lib/libstdc++.a(libstdc++.so.5) /usr/lib/libpthreads.a(shr.o) /usr/lib/libpthreads_compat.a(shr.o) /usr/lib/libcrypt.a(shr.o) /usr/lib/libc.a(shr.o) /usr/lib/libpthreads.a(shr_comm.o) /usr/lib/libpthreads.a(shr_xpg5.o) /tmp/MS/0.07/libbase/aix/xerces/libxerces-c1_6_0.a ./libserviceconnectorarchive.a $ And at least my xerces build: $ ldd ./libxerces-c1_6_0.a /pkg/dev01/tools/compiler/gcc/lib/libgcc_s_pthread.a(shr.o) /pkg/dev01/tools/compiler/gcc/lib/libgcc_s.a(shr.o) /pkg/dev01/tools/compiler/gcc/lib/libstdc++.a(libstdc++.so.5) /usr/lib/libpthreads.a(shr.o) /usr/lib/libpthreads_compat.a(shr.o) /usr/lib/libcrypt.a(shr.o) /usr/lib/libc.a(shr.o) /usr/lib/libpthreads.a(shr_comm.o) /usr/lib/libpthreads.a(shr_xpg5.o) ./libxerces-c1_6_0.a ### > I assume LDFLAGS is for the application and SHARED_LDFLAGS is for > the shared library. Yes indeed. > Why does LDFLAGS contain "-Wl,-brtl", but SHARED_LDFLAGS does not > contain "-Wl,-G"? Does the application use some other shared library with > System-V semantics? Not all shared libraries need to be linked with > "-Wl,-G", but "-Wl,-brtl" serves no purpose unless the shared library was > linked with "-Wl,-G". If you are using "-Wl,-brtl" for the linker to > notice shared libraries with the file suffix ".so", don't do that. AIX > shared libraries normally are archives (ar command) of shared objects. > You can use the ".a" suffix directly on the shared object instead of > creating an archive. Using the ".so" suffix for non-System-V semantics > shared objects just creates confusion. Ok, I did my homework after you told me that twice. ( See my makefile below !) > Also, I am concerned that you need to add "-Wl,-bh:5" to your link > line. If you need to change the linker halt level from the default, > something is wrong. I get level 4 Warnings of duplicated symbols. (Check my makefile, it deleted -> you are rigth this is not very clever) > You have not mentioned what errors are produced by the AIX linker > requiring raising the halt level and you have not mentioned what "problem" > you encounter if your server does many calls. No linking problems. (Just warnings!) > While AIX provides a thread-safe C library and GCC libstdc++-v3 > strives to be thread safe, libstdc++-v3 may not interact with AIX libc in > a thread-safe manner. libstdc++-v3 makes assumptions based on GNU libc > that are not correct on all platforms. For instance, there are known > issues with libstdc++-v3 use of setlocale() in I/O functions. Does your > shared library perform threaded I/O? Yes...!? > User-written code interacting with libstdc++-v3 must follow the > SGI thread-safety rule, which basically says that the direct use of any > global library object (e.g. std::cout is global) or non-local object > returned from the library shared amongst user threads, must be protected > by a mutex or similar by the user. It's a hard thing but I will check this. I got the job for 2 weeks and this is a mess anyway. ### MAKEFILE ### CXXFLAGS= -c -g \ -Wno-deprecated \ -pthread LDFLAGS= -pthread \ -Wl,-brtl \ -Wl,-bnoquiet \ ${XERCESC_LDFLAGS} \ -ldl SHARED_LDFLAGS= -pthread -shared \ -Wl,-bE:symbols.exp \ -Wl,-binitfini:init:fini:1 \ I've changed that to "0" but it does ot make any difference -Wl,-G \ -Wl,-bnoquiet \ ${XERCESC_LDFLAGS} \ -ldl #### Regards Mattey P.S.: Thanks for all the good and fast replys David. It's not working yet but any advice was worth a lot to me.