程序启动时与Boost正则表达式库链接时崩溃

时间:2013-03-14 14:21:29

标签: c++ linux boost linker

我们的项目(在C ++中)需要链接boost regex,所以我们只需找到正确的编译libboost_regex_1.45.0并告诉g ++链接它。编译成功,我们只是按预期获得正确的可执行文件。问题是,每次我们尝试运行可执行文件时,它都会在进入main()例程之前崩溃。

使用core附加生成的gdb文件,backtrace命令会在__bultin_strlen期间显示分段错误,并将其解析为strlen@@GLBC_2.2.5

由于我们的可执行文件与多个动态库相关联,因此可以使用readelf -s来识别有问题的符号,并将其归结为libboost_regex。但是,引用的符号已存在于RHEL6系统文件夹/lib64/libc.so中。

问题是,我们如何才能使正则表达式正常工作?

  • OS:RHEL6.2
  • GCC:4.3.2 / libstdc++6.0.13
  • Boost库由完全相同的工具集构建 - user-config.bjam是自定义的

由于各种原因,静态链接对我们来说不是一个好选择。

符号info和ldd信息附在https://gist.github.com/skyscribe/5184622

1 个答案:

答案 0 :(得分:0)

从gdb回溯中,我们看到带有参数std::char_traits<char>::length的{​​{1}}方法正在触发分段错误。 g ++ 4.3.2引入了新的Stack Smashing Protection特征,这可能会干扰strlen长度计算。

使用最新的g ++编译器重新编译/重新链接您的代码,看看您是否解决了这个错误。此示例代码不会重现此类错误:

\"http:\\\\/\\\\/localhostr.com\\\\/files\\\\/.+?\"