Crash during program startup when linking to the Boost regular expression library

Our project (in C ++) should reference boost regex , so we just find the correct compiled libboost_regex_1.45.0 and say g ++ to link it. The compilation was successful, and we just get the correct executable, as expected. The problem is that every time we try to run an executable file, it crashes before entering the main() procedure.

Attaching the generated core file with gdb , the backtrace command shows a segmentation error during __bultin_strlen , which is resolved to strlen@ @GLBC_2.2.5 .

Since our executable is linked to several dynamic libraries, readelf -s used to identify the problematic character, and it boils down to libboost_regex . However, the aforementioned symbol is already present in the RHEL6 system folder /lib64/libc.so .

The question is, how can we work with regex correctly?

  • OS: RHEL6.2
  • GCC: 4.3.2 / libstdc++6.0.13
  • Boost libraries are built with exactly the same toolbox - user-config.bjam configured

Static communication is not a good choice for us for various reasons.

Symbol information and ldd information are tied to https://gist.github.com/skyscribe/5184622

+4
source share
1 answer

From the reverse gdb tag, we see that the std::char_traits<char>::length method with the argument \"http:\\\\/\\\\/localhostr.com\\\\/files\\\\/.+?\" causes a segmentation error. g ++ 4.3.2 introduced new Stack Smashing Protection features that may interfere with strlen length calculation.

Recompile / reconfigure your code with the g ++ compiler and see if you resolve this error. This code example does not reproduce such an error:

 user@workstation ~ $ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.5.3/lto-wrapper.exe Target: i686-pc-cygwin Configured with: /gnu/gcc/releases/respins/4.5.3-3/gcc4-4.5.3-3/src/gcc-4.5.3/configure --srcdir=/gnu/gcc/releases/respins/4.5.3-3/gcc4-4.5.3-3/src/gcc-4.5.3 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --datarootdir=/usr/share --docdir=/usr/share/doc/gcc4 -C --datadir=/usr/share --infodir=/usr/share/info --mandir=/usr/share/man -v --with-gmp=/usr --with-mpfr=/usr --enable-bootstrap --enable-version-specific-runtime-libs --libexecdir=/usr/lib --enable-static --enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-lto --enable-java-awt=gtk --disable-symvers --enable-libjava --program-suffix=-4 --enable-libgomp --enable-libssp --enable-libada --enable-threads=posix --with-arch=i686 --with-tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4 CXX_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind --with-ecj-jar=/usr/share/java/ecj.jar Thread model: posix gcc version 4.5.3 (GCC) user@workstation ~ $ cat test.cc #include <iostream> #include <string> int main(int argc, char *argv[]) { char * a = "\"http:\\\\/\\\\/localhostr.com\\\\/files\\\\/.+?\""; int t = std::char_traits<char>::length (a); std::cout << t << std::endl; } user@workstation ~ $ g++ -g test.cc test.cc: In function 'int main(int, char**)': test.cc:6:14: warning: deprecated conversion from string constant to 'char*' user@workstation ~ $ gdb a.exe Reading symbols from /home/user/a.exe...done. (gdb) b std::char_traits<char>::length Breakpoint 1 at 0x4017f6: file /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/char_traits.h, line 263. (gdb) r Starting program: /home/user/a.exe [New Thread 764.0x5e4] [New Thread 764.0x100c] Breakpoint 1, std::char_traits<char>::length (__s=0x402080 "\"http:\\\\/\\\\/localhostr.com\\\\/files\\\\/.+?\"") at /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/char_traits.h:263 263 { return __builtin_strlen(__s); } (gdb) c Continuing. 41 [Inferior 1 (process 764) exited normally] (gdb) 
0
source

Source: https://habr.com/ru/post/1469265/


All Articles