gcc 4.8.5 的string问题

news/2024/7/8 0:34:47

gcc 4.8.5及一下版本 的string 因为内部内存管理采用了COW的方式,导致了string在多线程的状态下容易崩溃。崩的很没有规律,表现就是string在赋值的时候就莫名其妙的崩了,查看堆栈,你也看不出啥。崩溃的很随机。
为了避免崩溃,我改了很多地方,从

gdb /usr/local/freeswitch/bin/freeswitch  core.78563
//然后输入
bt

当前系统环境
centos 7
gcc 4.8.5
freeswitch 1.6.20版本,使用的是gcc4.8.5编译的。
需要做的是编译第三方库给freeswitch用,动态加载so文件的方式。

方法有两种:
方式一:升级centos 7 的gcc编译环境,将freeswitch也用高版本的gcc重新编译一次。
很明显不允许。

方式二:比较麻烦。
安装scl (不做介绍)
使用命令

scl enable devtoolset-8 bash

切换到高版本的gcc编译项目。
编译的时候我添加了 -D_GLIBCXX_USE_CXX11_ABI=0 编译选项
在这里插入图片描述
链接的时候,添加了
-L/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8 -lstdc++_nonshared
在这里插入图片描述
然后fs就能正常链接调用了。

完毕

补充。
我研究了一下 scl的环境
在这里插入图片描述

在这里插入图片描述
根据这里我找到了实际上链接的库 -lstdc++_nonshared
也就是新版本gcc 所依赖的库。

查看当前gcc 所依赖的系统库在这里插入图片描述
发现它依赖的还是当前系统的库,所以该gcc能正常运行。

使用命令
nm libstdc++_nonshared.a
查看当前 .a 所提供的接口,是否有自己需要的

nm libstdc++_nonshared.a | grep ZNKSt3_V214error_category10_M_messageEi

在这里插入图片描述
转义接口用于将接口从混淆的转成明文的。

c++filt  _ZTIN9__gnu_cxx24__concurrence_lock_errorE

在这里插入图片描述
总结:
gcc 4 版本的string,有bug不建议用了。但是有的工程没办法


http://lihuaxi.xjx100.cn/news/366940.html

相关文章

Python修改列表元素有什么方法?

增删改查是处理数据最常见的方法,前两种说过了,这里就要说说python提供的两种修改列表元素的方法,一种是修改单个元素,还有一种的修改一组数据的方法。 一、修改单个元素 修改单个元素从原理上讲就是重新给指定位置的元素赋值。…

MATLB|基于改进教学的优化算法(TLSBO)的最优功率优化

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文&…

【人工智能与机器学习】——朴素贝叶斯与支持向量机(学习笔记)

📖 前言:朴素贝叶斯(Naive Bayes)和支持向量机(Support Vector Machine,SVM)是两种不同的机器学习算法,它们都用于分类。朴素贝叶斯算法基于贝叶斯定理来进行分类,它是一…

Intelligent standby list cleaner(清理备用内存工具)--九五小庞

Intelligent standby list cleaner是一款待机列表清理软件,这款工具可以帮助用户监视计算机的内存使用情况,等计算机的内存使用到一定大小后,软件会自动清理内存列表,通过这种方式释放计算机内存来保障计算机的运行速度;很多大型软件或游戏对电脑的资源占用尤为严重,因此…

虚拟机vm+ubuntu搭建linux后台编译服务器

1、安装虚拟机+ubuntu(带桌面或不带桌面)略 2、扩展ubuntu空间 https://www.cnblogs.com/hehesi/p/16949743.html 2、配置网络,桥接模式加主机模式桥接模式对于主机和虚拟机之前通讯不太友好,速度较慢,还需插上外部网线,主机模式可以弥补内部通讯问题添加双网卡:选择相应…

[附源码]计算机毕业设计计算机相关专业考研资料管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[漏洞复现]Thinkphp RCE

文章目录简介影响版本复现文件包含目录穿越修复简介 Thinkphp 是一款 PHP 框架,如果开启了多语言功能,就可以通过 get、header、cookie 等位置传入参数实现目录穿越和文件包含,从而利用 pearcmd 文件包含实现远程命令执行(RCE&am…

【✨十五天搞定电工基础】半导体器件

本章要求1. 理解PN结的单向导电性,三极管的电流分配和电流放大作用 2. 了解二极管、稳压管和三极管的基本构造、工作原理和特性曲线,理解主要参数的意义 3. 会分析含有二极管的电路 目录 一、半导体基础知识 1、本征半导体的导电机理 2、杂质半导体 …