Hi! When linking optimized static build of re2 with Firebird in Linux, crash happens when destroying some RE2 objects.
I have tracked the problem: - Firebird (libEngine or executables) defines new/delete operators and hides them through version script - re2 uses libstdc++ std::string (for example), that uses basic_string with default allocator - libstdc++ exports basic_string template with default allocator - re2 then allocates std::string internal objects with libstdc++ new operator - re2 object is destroyed and calls Firebird's delete operator It seems there are three ways to fix the problem: 1) Link Firebird executables and shared libraries with -static-libstdc++. 2) Link shared re2 within Firebird. This is what happens with ICU, it then calls libstdc++ operator new/delete. But since re2 is C++ library I prefer to not do that and always static link the internal version. 3) Exports new/delete operators in Firebird version scripts. Not sure this is good thing and will work always. For me the better option is (1) and this will also avoid problems when installing binaries compiled in different OS versions. AFAIK Windows also uses dynamic std c++ library and theoretically be susceptible to the problem, but at least in basic tests it works. However I'm not 100% sure it has no problem. Comments, please. Adriano Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel