java 编译器版本_编译器libstdc版本与系统版本

我试图理解g如何选择它链接的libstdc版本以及当库的“系统”版本不同时它意味着什么 .

我正在使用gcc / g 4.1.2,根据ABI Guidelines doc,包括libstdc .so.6.0.8,果然:

-rwxr-xr-x 1 root root 4397810 May 18 2007 /opt/gcc4.1.2/lib/libstdc++.so.6.0.8

基于我对ABI前向兼容性的理解,我可以使用g 4.1.2构建并期望代码在更高版本的libstdc而不是6.0.8的系统上运行,但不能在具有早期版本的系统上运行,因为将有一个旧版本的ABI .

在同一台机器上,/ usr / lib中有一个旧版本的libstdc:

-rwxr-xr-x 1 root root 804288 Jul 22 2005 /usr/lib/libstdc++.so.6.0.3

如果我在这台机器上使用g 4.1.2编译代码,那么ldd它,我看到引用的/ usr / lib中的libstdc版本是6.0.3:

# ldd test

.

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x005b6000)

.

这是预期的,因为首先检查/ usr / lib . 应用程序运行正常 .

我的问题是:这里发生了什么?

g 4.1.2是否与该版本(6.0.8)的libstdc .so版本相关联?如果是这样,为什么可执行文件可以在运行时使用/ usr / lib中的旧版本,当它具有较旧的ABI时?运气?

或者让g 4.1.2在链接时获取libstdc(6.0.3)的/ usr / lib版本并使用它,因为它以与可执行文件在运行时相同的方式解析库路径?即使libstdc不是它的“自有”版本,也可以这样做吗? g 4.1.2(6.0.8)中libstdc版本的用途是什么?它是否在这个过程中被使用了?

任何见解都表示赞赏 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值