Common issues with GCC-4.6 / G++-4.6


  • GCC4.6

Common issues with GCC-4.6 / G++-4.6

GCC-4.6 is again more strict, introduces new warnings, and lets packages fail to build, which did succeed to build with earlier GCC versions.

Warnings

Warning format

Every warning has the option which did produce the warning appended to the warnings, e.g.

FAILURE: warning diffs:  1c1
< #warning undefining SECOND due to option name conflict [-Wcpp]
---
> #warning undefining SECOND due to option name conflict
FAIL: cond.test

New warning -Wunused-but-set-variable

This triggers a lot:

uuid_gen_unix.c:62:20: error: variable 'tv' set but not used [-Werror=unused-but-set-variable]

Either fix it, or if the package is built with -Werror, add as a workaround: -Wno-error=unused-but-set-variable

C++

NULL not defined

../build/include/apt-pkg/weakptr.h:58:26: error: 'NULL' was not declared in this scope

Fix: #include <cstdlib> is missing.

ptrdiff_t does not name a type

/usr/include/sigc++-2.0/sigc++/signal.h:38:11: error: 'ptrdiff_t' does not name a type

Fix: #include <cstddef>

size_t does not name a type

djvulibre:

GSmartPointer.h:497:30: error: 'size_t' does not name a type

Fix: #include <cstddef>

Linker

-z syms unknown

ld.gold doesn't know about -z syms.

d-conf:

  CCLD   libdconfsettings.so
gcc: error: unrecognized option '-avoid-version'

gcc kerneloops.o submit.o dmesg.o configfile.o -Wl,--as-needed `pkg-config --libs glib-2.0 dbus-glib-1` `curl-config --libs` -Wl,"-z relro" -Wl,"-z now"  -o kerneloops
/usr/bin/ld.gold:  relro: unknown -z option
/usr/bin/ld.gold: use the --help option for usage information
collect2: ld returned 1 exit status


### 配置 GCC 11 的 g++ 符号链接及 `--slave` 参数 为了实现多版本 GCC 编译器的管理并正确设置符号链接,可以利用 `update-alternatives` 工具来完成这一操作。以下是具体方法: #### 使用 `update-alternatives` 设置 GCCG++ 多版本切换 `update-alternatives` 是 Linux 系统中的一个工具,允许管理员维护一组替代程序的标准路径[^5]。对于多个版本的 GCC/G++,可以通过该工具创建符号链接及其关联文件。 1. **安装 GCC 11** 如果尚未安装 GCC 11,则需要先执行以下命令进行安装: ```bash sudo apt update sudo apt install gcc-11 g++-11 ``` 2. **注册 GCC 到 alternatives 中** 将新安装的 GCC 版本加入到系统的 alternatives 管理中: ```bash sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 \ --slave /usr/bin/g++ g++ /usr/bin/g++-11 \ --slave /usr/bin/cc cc /usr/bin/gcc-11 \ --slave /usr/share/man/man1/gcc.1.gz gcc.1.gz /usr/share/man/man1/gcc-11.1.gz ``` 这里使用了 `--slave` 参数指定额外的相关文件(如 `g++`, `cc`),以便当切换默认编译器时能够同步更改这些文件的符号链接。 3. **验证当前可用选项** 查看已有的 GCC 替代方案列表以及它们各自的优先级: ```bash sudo update-alternatives --display gcc ``` 4. **手动选择默认版本** 执行交互模式下的选择命令以改变默认使用的 GCC/G++ 版本: ```bash sudo update-alternatives --config gcc ``` 此时会显示所有可选的 GCC 版本供用户挑选。输入对应编号即可完成切换。 5. **确认版本变更生效** 输入以下命令检查是否成功设置了新的默认编译器版本: ```bash gcc --version g++ --version ``` 通过上述步骤,不仅实现了对不同版本 GCC/G++ 的灵活控制,还借助 `--slave` 参数简化了相关联组件的一致性处理过程。 ```bash sudo update-alternatives --set gcc /usr/bin/gcc-11 ``` 如果希望直接设定某个特定版本作为全局默认值而无需进入交互界面,也可以采用上面这句指令。 --- ### 注意事项 在实际应用过程中需要注意以下几点: - 不同发行版可能具有不同的包名或依赖关系,在尝试之前最好查阅官方文档确认适用范围。 - 当前环境中有无其他影响 PATH 或者 LD_LIBRARY_PATH 设定的因素也可能干扰最终效果,请酌情调整相应变量内容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值