LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2307|回复: 10

如何使C++程序链接到libstdc++.so而不是libstdc++.so.5/6?

[复制链接]
发表于 2007-6-11 14:36:43 | 显示全部楼层 |阅读模式
如何使C++程序链接到libstdc++.so而不是libstdc++.so.5/6?

我使用gcc开发C++程序。
如果用gcc 3.4,会链接到libstdc++.so.5
如果用gcc 4.1.2,会链接到libstdc++.so.6

如何链接到libstdc++.so?
不想使用静态链接。

谢谢。
发表于 2007-6-11 22:36:47 | 显示全部楼层
libstdc++.so只是一个连接而已,真正的库就是libstdc++.so.5/6
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 15:14:57 | 显示全部楼层
我在AS4上编译的,它需要找libstdc++.so.6.
但AS3上没有。
这些平台上都有libstdc++.so链接,:)
回复 支持 反对

使用道具 举报

发表于 2007-6-12 18:17:15 | 显示全部楼层
AS4可以兼容AS3的应用,在AS4上用gcc 4.1.2编译的程序不能在AS3上运行。
回复 支持 反对

使用道具 举报

发表于 2007-6-12 19:13:34 | 显示全部楼层
Linux 下的兼容多是指代码级别的兼容。你应该提供你的代码,并在目标机上编译来实现移植。或者把你的代码进行静态编译,不过不推荐这样
回复 支持 反对

使用道具 举报

发表于 2007-6-12 19:15:24 | 显示全部楼层
另外,楼主可以试试动态载入,我没试过它是否可以实现对同一个库的不同版本进行载入,不过应该问题不大。

man ldopen
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-13 11:14:46 | 显示全部楼层
C++程序的库啊,哪敢动态加载。
动态加载libstc++.so?
回复 支持 反对

使用道具 举报

发表于 2007-6-13 12:39:13 | 显示全部楼层
Post by littlestar
C++程序的库啊,哪敢动态加载。
动态加载libstc++.so?

确实,对于 C++ 的程序动态加载是否合适我不清楚。

因此,还是请采取代码目标机编译的方法来实现兼容。

如果有特殊的原因使得楼主只能公开二进制文件,那么可以采用交叉编译的方法,在本机装一套和目标机版本相同的库与编译器,然后交叉编译,当然,如果打算支持多个目标平台,就要在本机装多个交叉编译器。PC 到 PC 的交叉工具链还是很好做的
回复 支持 反对

使用道具 举报

发表于 2007-6-14 12:10:06 | 显示全部楼层
之所以出现 libstdc++.so.5 和 libstdc++.so.6 两个,是因为从 gcc-3.4 开始 C++ ABI 升级到第二版,与之前的不再二进制兼容。因此是不可能同时兼容的。楼主只能换编译器重新编译。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-19 10:03:07 | 显示全部楼层
为什么在/usr/lib下, 用ln -s libstdc++.so.5 libstdc++.so.6
就没事了.

C++, 兼容做得太差了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表