恙髡 发表于 2025-6-7 09:16:10

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

1. 下载源码包
wget http://ftp.gnu.org/gnu/gcc/gcc-6.2.0/gcc-6.2.0.tar.bz22. 解压tar jxf gcc-6.2.0.tar.bz23. 下载编译依赖cd gcc-6.2.0./contrib/download_prerequisites4. 生成makefile文件mkdir gcc-build-6.2.0cd gcc-build-6.2.0/../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib5. 编译make -j4 4表示使用4个核心,根据你的CPU来指定。也可不指定任何参数6. 安装make install7. 验证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
                       ^
compilation terminated.
解决方案:
修改libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc文件:vim libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
首先注释掉 #include:
接着在 251 行修改 unsigned struct_ustat_sz = sizeof(struct ustat); 语句
注释掉251行,换行后粘贴以下内容:
  // Use pre-computed size of struct ustat to avoidwhich
  // 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 
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

替攀浮 发表于 2025-10-24 11:19:32

前排留名,哈哈哈

湛恶 发表于 2025-11-9 14:13:31

很好很强大我过来先占个楼 待编辑

涂流如 发表于 2025-11-27 04:43:40

用心讨论,共获提升!

汲佩杉 发表于 2025-12-26 07:07:47

感谢分享,学习下。

剽达崖 发表于 2025-12-29 16:42:19

谢谢楼主提供!

寨重 发表于 2026-1-7 19:24:56

鼓励转贴优秀软件安全工具和文档!

姊囝 发表于 2026-1-12 17:36:28

东西不错很实用谢谢分享

卒挪 发表于 2026-1-14 05:37:23

热心回复!

讲怔 发表于 2026-1-17 05:57:17

yyds。多谢分享

洫伍俟 发表于 2026-1-17 06:32:20

热心回复!

遑盲 发表于 2026-1-20 00:22:00

感谢,下载保存了

鞍注塔 发表于 2026-1-26 06:11:47

yyds。多谢分享

裒噎 发表于 2026-1-26 10:37:43

感谢,下载保存了

滥眩 发表于 2026-1-27 08:08:26

热心回复!

硫辨姥 发表于 2026-1-28 05:01:03

前排留名,哈哈哈

申倩语 发表于 2026-2-3 02:42:15

谢谢分享,辛苦了

命煦砌 发表于 2026-2-4 04:48:07

过来提前占个楼

格恳绌 发表于 2026-2-4 06:27:07

感谢分享,下载保存了,貌似很强大

劳暄美 发表于 2026-2-6 04:22:38

新版吗?好像是停更了吧。
页: [1] 2
查看完整版本: ubuntu 20.04安装GCC G++ 6.2,支持c++ 14