On 18.8.2014 13:25, Jonathan Wakely wrote: > I'm on my phone so can't send plain text mail to the list, or check the > code, but I'm pretty sure the answer is 101 > > Anything lower than that is reserved for the implementation so libstdc++ > would use that. Nothing in string or vector needs dynamic init anyway IIRC Some paths of my library's initialization might try to print warnings or errors. I have hit a SIGSEGV with the following test case, which uses std::cerr: ~~~~ #include struct S1 { S1() { std::cerr << __FUNCTION__ << "\n"; } } static s1 __attribute__ ((__init_priority__ (65535/2))); int main () { return 0; } ~~~~ The stack trace is ~~~~ #0 0x00007ffff7b6a559 in std::ostream::sentry::sentry(std::ostream&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #1 0x00007ffff7b6ac19 in std::basic_ostream >& std::__ostream_insert >(std::basic_ostream >&, char const*, long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #2 0x00007ffff7b6b077 in std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #3 0x000000000040081d in S1::S1 (this=0x601172 ) at test.cxx:5 #4 0x00000000004007d6 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=32767) at test.cxx:6 #5 0x00000000004007eb in _GLOBAL__sub_I.32767_main(void) () at test.cxx:13 #6 0x000000000040087d in __libc_csu_init () #7 0x00007ffff7731e55 in __libc_start_main (main=0x40077d , argc=1, argv=0x7fffffffe2c8, init=0x400830 <__libc_csu_init>, fini=, rtld_fini=, stack_end=0x7fffffffe2b8) at libc-start.c:246 #8 0x00000000004006b9 in _start () ~~~~ Is this expected? > > On Aug 17, 2014 8:56 PM, "Václav Zeman" > wrote: > > Hi. > > I want to use the init_priority(prio) attribute > (https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html#C_002b_002b-Attributes) > to initialize stuff in my library early so that users of the library can > use the library during their own static objects construction. However, > my library uses standard C++ library facilities like std::string, > std::vector<>, etc. The question is: > > What is the lowest priority for init_priority attribute that I can use > to still have libstdc++ initialize itself before my library is > initialized? -- VZ