我们的项目(在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
中。
问题是,我们如何才能使正则表达式正常工作?
libstdc++6.0.13
user-config.bjam
是自定义的由于各种原因,静态链接对我们来说不是一个好选择。
符号info和ldd信息附在https://gist.github.com/skyscribe/5184622
答案 0 :(得分:0)
从gdb回溯中,我们看到带有参数std::char_traits<char>::length
的{{1}}方法正在触发分段错误。 g ++ 4.3.2引入了新的Stack Smashing Protection特征,这可能会干扰strlen长度计算。
使用最新的g ++编译器重新编译/重新链接您的代码,看看您是否解决了这个错误。此示例代码不会重现此类错误:
\"http:\\\\/\\\\/localhostr.com\\\\/files\\\\/.+?\"