no member named ‘make_unique‘ in namespace ‘std‘

本文详细介绍了在CentOS7系统中,因自带编译器版本过低无法支持C++14标准的make_unique特性,而进行GCC升级至8.2.0的过程。包括下载、配置、编译、安装及环境变量设置等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用CentOS 7 系统自带编译器4.8.5,编译一个项目,项目的有一个编译选项是-std=c++14,报错:

no member named 'make_unique' in namespace 'std'

根据GCC 4.9 Release Series — Changes, New Features, and Fixes- GNU Project 可以知道,到gcc的4.9版本之后才支持-std=c++1y选项。

查找gcc的版本,当前已经到了8.2.0版本了,果断直接升级到8.2.0。升级过程可以参考:

第一步,到Index of /gnu/gcc,选择要下载的版本。这里以8.2.0为例

wget http://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.xz

第二步,选择一个路径解压:tar -xvf gcc-8.2.0.tar.xz

第三步, 进入解压的路径:cd gcc-8.2.0   下载gcc的依赖

   ./contrib/download_prerequisites

第四步,编译

在 gcc-8.2.0 路径下,执行命令:mkdir build && cd build

然后执行:../configure --prefix=/disk4/gcc/gcc-8.2.0

最后,执行 make -j4 进行编译

第五步,安装 

make install

第六步,设置环境变量

将当前安装的版本设置为默认的编译器:

vim ~/.bash_profile

export PATH=/disk4/gcc8/gcc-8.2.0/bin:$PATH

因为需要使用新版本的头文件和库,所以,需要将新版本的头文件和库的路径添加到环境变量:

export C_INCLUDE_PATH=/disk4/gcc8/gcc-8.2.0/include
export LD_LIBRARY_PATH=/disk4/gcc8/gcc-8.2.0/lib:/disk4/gcc8/gcc-8.2.0/lib64

保存退出后,再执行 source ~/.bash_profile

第七步,确认环境变量设置成功

执行 export | grep PATH, 看第六步设置的环境变量是否生效。

然后执行 gcc -v,查看当前使用的gcc的版本。

再次编译项目,成功!!!

继续编译报这些错误,你看看是不是要包含什么头文件: packages/apps/zorro/neteq/test1.cpp:77:17: error: use of undeclared identifier 'LS_WARNING' RTC_LOG(LS_WARNING) << "Failed to insert packet: " << error; ^ packages/apps/zorro/neteq/test1.cpp:90:17: error: use of undeclared identifier 'LS_ERROR' RTC_LOG(LS_ERROR) << "Failed to get audio: " << error; ^ packages/apps/zorro/neteq/test1.cpp:101:12: error: call to deleted constructor of 'webrtc::AudioFrame' return audio_frame; ^~~~~~~~~~~ packages/apps/zorro/neteq/include/api/audio/audio_frame.h:60:3: note: 'AudioFrame' has been explicitly marked deleted here AudioFrame(const AudioFrame&) = delete; ^ packages/apps/zorro/neteq/test1.cpp:116:5: error: unknown type name 'RtpReceiver' RtpReceiver rtp_receiver(1234); // <BC><E0><CC><FD> 1234 <B6>˿<DA> ^ packages/apps/zorro/neteq/test1.cpp:132:13: error: use of undeclared identifier 'PlayAudio' PlayAudio(audio.data(), ^ packages/apps/zorro/neteq/test1.cpp:139:9: error: use of undeclared identifier 'SleepMs' SleepMs(10); ^ packages/apps/zorro/neteq/test1.cpp:177:26: error: no member named 'Socket' in namespace 'rtc' std::unique_ptr<rtc::Socket> socket_; ~~~~~^ packages/apps/zorro/neteq/test1.cpp:148:24: error: no member named 'Socket' in namespace 'rtc' socket_ = rtc::Socket::Create(rtc::SocketAddress(), rtc::Socket::Type::SOCK_DGRAM); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:148:66: error: no member named 'Socket' in namespace 'rtc' socket_ = rtc::Socket::Create(rtc::SocketAddress(), rtc::Socket::Type::SOCK_DGRAM); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:148:44: error: no member named 'SocketAddress' in namespace 'rtc' socket_ = rtc::Socket::Create(rtc::SocketAddress(), rtc::Socket::Type::SOCK_DGRAM); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:151:27: error: expected ';' after expression rtc::SocketAddress local_address("0.0.0.0", port_); ^ ; packages/apps/zorro/neteq/test1.cpp:151:14: error: no member named 'SocketAddress' in namespace 'rtc' rtc::SocketAddress local_address("0.0.0.0", port_); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:151:28: error: use of undeclared identifier 'local_address' rtc::SocketAddress local_address("0.0.0.0", port_); ^ packages/apps/zorro/neteq/test1.cpp:152:36: error: use of undeclared identifier 'local_address' int result = socket_->Bind(local_address); ^ packages/apps/zorro/neteq/test1.cpp:158:14: error: no type named 'SocketAddress' in namespace 'rtc' rtc::SocketAddress remote_address; ~~~~~^ packages/apps/zorro/neteq/test1.cpp:177:34: warning: private field 'socket_' is not used [-Wunused-private-field] std::unique_ptr<rtc::Socket> socket_; ^ 15 warnings and 15 errors generated.
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值