首页 > 系统相关 >ubuntu 20.04安装GCC G++ 6.2,支持c++ 14

ubuntu 20.04安装GCC G++ 6.2,支持c++ 14

时间:2024-09-09 18:03:18浏览次数:12  
标签:__ GCC 14 libsanitizer ++ sanitizer defined sigaltstack struct

1. 下载源码包

wget http://ftp.gnu.org/gnu/gcc/gcc-6.2.0/gcc-6.2.0.tar.bz2 2. 解压 tar jxf gcc-6.2.0.tar.bz2 3. 下载编译依赖 cd gcc-6.2.0 ./contrib/download_prerequisites 4. 生成makefile文件 mkdir gcc-build-6.2.0 cd gcc-build-6.2.0/ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib 5. 编译 make -j4  4表示使用4个核心,根据你的CPU来指定。也可不指定任何参数 6. 安装 make install 7. 验证 gcc -v   编译过程中遇到的问题:
问题1:error: dereferencing pointer to incomplete type ‘struct ucontext’ 在函数‘x86_64_fallback_frame_state’中: ./md-unwind-support.h:65:47: 错误: dereferencing pointer to incomplete type ‘struct ucontext’       
 sc = (struct sigcontext *) (void *) &uc_->uc_mcontext;    
解决方案:
 struct ucontext * uc_ = context->cfa;
修改为
struct ucontext_t * uc_ = context->cfa;
重新编译make

问题2:sanitizer_platform_limits_posix.cc:158:23: 致命错误:sys/ustat.h:没有那个文件或目录 ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:159:
28: fatal error: sys/ustat.h: No such file or directory
 #include <sys/ustat.h>
                       ^
compilation terminated.
解决方案:
修改libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc文件: vim libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
首先注释掉 #include <sys/ustat.h>
接着在 251 行修改 unsigned struct_ustat_sz = sizeof(struct ustat); 语句
注释掉251行,换行后粘贴以下内容:
  // Use pre-computed size of struct ustat to avoid <sys/ustat.h> which
  // has been removed from glibc 2.28.
#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \
  || defined(__powerpc64__) || defined(__arch64__) || defined(__sparcv9) \
  || defined(__x86_64__)
#define SIZEOF_STRUCT_USTAT 32
#elif defined(__arm__) || defined(__i386__) || defined(__mips__) \
  || defined(__powerpc__) || defined(__s390__)
#define SIZEOF_STRUCT_USTAT 20
#else
#error Unknown size of struct ustat
#endif
  unsigned struct_ustat_sz = SIZEOF_STRUCT_USTAT;
重新make

问题3:
../../.././libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:270:22: 错误: 聚
合‘sigaltstack handler_stack’类型不完全,无法被定义
   struct sigaltstack handler_stack;
                      ^~~~~~~~~~~~~
解决方案:

1.打开libsanitizer/sanitizer_common/sanitizer_linux.h文件,注释第22行的struct sigaltstack;
2.修改31.32行:
uptr internal_sigaltstack(const struct sigaltstack* ss,
                          struct sigaltstack* oss);

修改为
uptr internal_sigaltstack(const void* ss, void* oss);

3.修改libsanitizer/sanitizer_common/sanitizer_linux.cc文件549、550行
uptr internal_sigaltstack(const struct sigaltstack *ss,                                      
                                struct sigaltstack *oss) {

修改为
uptr internal_sigaltstack(const void *ss, void *oss) {

4.修改libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc270行
struct sigaltstack handler_stack;
修改为
stack_t handler_stack;

5.修改libsanitizer/tsan/tsan_platform_linux.cc294行
__res_state *statp = (__res_state*)state;
修改为
struct __res_state *statp = (struct __res_state*)state;
重新make
问题4:sanitizer_common/sanitizer_internal_defs.h:254:72: error: size of array ‘assertion_failed__1142’ is negative
解决方案:
修改 /gcc-6.3.0/configure文件
删除文件中 target-libsanitizer \,大概在两千多行
重新make  

标签:__,GCC,14,libsanitizer,++,sanitizer,defined,sigaltstack,struct
From: https://www.cnblogs.com/victoryu2022/p/18398362

相关文章

  • C++创建与调用dll动态链接库(MinGW64 Dev-C++)
    本文使用的是dev-c++,如果涉及到VC++中不一样的操作,也会适当进行区分。项目一:创建DLL1、创建一个DLL类型的项目,当前命名为dlltest,并选择合适的路径进行保存。 2、在生成的预设置代码中,加入如下代码//这是头文件dll.h#ifndef_DLL_H_#define_DLL_H_#ifBUILDING......
  • 关于schneider施耐德140模块
    SCHNEIDER140模块是施耐德电气(SchneiderElectric)公司生产的一系列工业自动化和控制产品,这些模块通常用于Quantum系列PLC(可编程逻辑控制器)系统中,以实现各种自动化和控制任务。以下是对SCHNEIDER140模块的一些详细介绍:一、模块类型与功能SCHNEIDER140模块包括但不限于以下......
  • Qt/C++ 音视频开发: 使用 mpv 进行录像存储
    Qt/C++音视频开发:使用mpv进行录像存储介绍在现代应用中,音视频处理与存储是非常常见的需求。mpv是一个开源的视频播放器,具有强大的功能,可以通过其API进行定制化开发。本文将详细介绍如何使用Qt/C++和mpv实现录像存储功能。应用使用场景视频监控系统:实时采集......
  • 1 件全新6ES7314-6EH04-0AB0 6ES73146EH040AB0 中央处理单元
    6ES7314-6EH04-0AB06ES73146EH040AB0中央处理单元6ES7314-6EH04-0AB06ES73146EH040AB0中央处理单元6ES7314-6EH04-0AB06ES73146EH040AB0中央处理单元6ES7314-6EH04-0AB06ES73146EH040AB0中央处理单元引脚线6ES7314-6EH04-0AB06ES73146EH040AB0中央处理单元说明书......
  • 【C++】C++ STL 探索:List使用与背后底层逻辑
    C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C++内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现本文将通过模拟实现List,从多个角度深入剖析其底层机......
  • 案例分析:如何用设计模式优化性能14
    设计模式就是对常用开发技巧进行的总结,它使得程序员之间交流问题,有了更专业、便捷的方式。比如,我们在《02|理论分析:性能优化有章可循,谈谈常用的切入点》中提到,I/O模块使用的是装饰器模式,你就能很容易想到I/O模块的代码组织方式。事实上,大多数设计模式并不能增加程序的性......
  • C++ 多线程代码性能分析——Oracle Developer Studio工具教程
        最近写项目的时候,为了提升性能,把原来一些单线程的代码改成了并行运行。这里我用到的用于评估性能提升效果的工具是OracleDeveloperStudio,不过刚上手时,发现网上相关的教程和博客较少,有些功能的使用也是摸索着过来的,这一过程可谓是十分痛苦了……如今距离初次接触......
  • C++20 协程:异步编程的新纪元
    C++20引入了协程(coroutines),这是一种全新的异步编程模型,使得编写异步代码变得更加简洁和直观。本文将详细介绍C++20协程的概念、功能演变及其在实际项目中的应用。通过本文,你将了解到协程的基本原理、语法和如何利用协程来简化异步编程。1.协程的概念协程(coroutine)是......
  • CS3214 Fall 2024     Exercise
    CS3214Fall2024       Exercise0DueDate: seewebsiteInthisclass,youarerequiredtohavefamiliaritywithUnixcommandsandUnixpro-grammingenvironments.Thefirstpartofthisexerciseisareviewtomakesureyouarecomfortableinou......
  • C++---内存管理
    1C/C++内存分布栈区:由编译器自动分配和释放,存放运行时候的局部变量,函数参数,返回数据,返回地址。堆区:一般由程序员自己分配,然后自己释放,例如栈的实现malloc开辟的数组空间。数据段(静态区):存放全局变量,静态数据,常量,程序结束后自动释放。代码段(常量区):存放常量字符串和可执行代......