------- Additional Comments From jakub at redhat dot com 2005-07-14 12:48 ------- That patch fixes the original testcase, but unfortunately does not fix the following one. cat > P.c <<EOF #include <dlfcn.h> #include <pthread.h>
void * tf (void *arg) { void *h = dlopen ("./libP.so", RTLD_LAZY); void (*fn) (void); if (!h) return 0; fn = dlsym (h, "foo"); fn (); void *h2 = dlopen ("libstdc++.so.6", RTLD_LAZY); if (!h2) return 0; dlclose (h); return 0; } int main (void) { pthread_t th; pthread_create (&th, NULL, tf, NULL); pthread_join (th, NULL); return 0; } EOF cat > libP.C <<EOF #include <string> #include <ext/mt_allocator.h> template class __gnu_cxx::__mt_alloc<short, __gnu_cxx::__common_pool_policy<__gnu_cxx::__pool, true> >; typedef std::char_traits<char> my_traits_type; typedef __gnu_cxx::__mt_alloc<short, __gnu_cxx::__common_pool_policy<__gnu_cxx::__pool, true> > my_allocator_type; typedef std::basic_string<char, my_traits_type, my_allocator_type> my_string; extern "C" void foo (void) { my_string s; s += "hello"; } EOF g++ -g -O2 -shared -fpic -o libP.so libP.C gcc -g -O2 -o P P.c -ldl -lpthread -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22309