Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哪个版本的libstdc++;。如果同一系统上有多个GCC,则使用so_C++_Linux_Gcc - Fatal编程技术网

C++ 哪个版本的libstdc++;。如果同一系统上有多个GCC,则使用so

C++ 哪个版本的libstdc++;。如果同一系统上有多个GCC,则使用so,c++,linux,gcc,C++,Linux,Gcc,我正在尝试在当前安装和使用GCC4.3的系统上安装GCC4.8。我做了一些研究,知道可以保留多个版本的gcc。对我来说,使用--program suffix=option似乎是最好的解决方案。但我的问题是,我可以直接将新的GCC4.8安装到安装旧gcc的地方吗?两个版本的库是否可以在同一个lib目录中混合使用 更多细节:旧的gcc安装在/usr/bin、/usr/lib64中。如果我将新的gcc直接安装到相同的位置,那么还将安装新的库/usr/lib64。这是个问题吗?gcc编译器知道链接时使用

我正在尝试在当前安装和使用GCC4.3的系统上安装GCC4.8。我做了一些研究,知道可以保留多个版本的gcc。对我来说,使用--program suffix=option似乎是最好的解决方案。但我的问题是,我可以直接将新的GCC4.8安装到安装旧gcc的地方吗?两个版本的库是否可以在同一个lib目录中混合使用

更多细节:旧的gcc安装在/usr/bin、/usr/lib64中。如果我将新的gcc直接安装到相同的位置,那么还将安装新的库/usr/lib64。这是个问题吗?gcc编译器知道链接时使用哪个库吗


非常感谢

我在Gentoo上,它支持同时安装多个版本的GCC。这些库最终位于
/usr/lib/gcc/
中。Ubuntu将它们安装在同一个地方,所以我猜这是一个相当常见的设置

虽然gcc显然可以在编译时找出要链接的正确版本,但运行时使用的版本是使用
/etc/ld.so.conf.d
中的文件配置的。因此,可能会发生这样的情况:一个程序针对一个版本的gcc库进行编译,但使用另一个版本执行

如果
ld.so.conf.d
设置更喜欢较新的版本而不是较旧的版本,那么只要gcc人员没有在这些库中引入新的bug,并且只要配置使这些库完全向后兼容,这基本上是可以的

在这种情况下,
libstdc++
破坏了一些C++11特性的向后兼容性,这些特性是实验性的,并使用自定义的
configure
开关启用。这些事情应该是罕见的,但它们可能会发生

我从乔纳森·韦克利那里学到:

对于任何x,混合使用GCC4.x和4.y构建的C++11代码是完全不受支持的(也不太可能工作)=y

混合使用4.8.x和4.8.y构建的代码应该可以工作,并使用默认配置

因此,虽然这个设置在Gentoo上实际工作,但如果您自己尝试这个,您就只能靠自己了。特别是因为我知道没有干净的方法来确保生成的二进制文件在运行时与匹配的库相链接

您可以尝试
--program suffix
是否也会影响库名称。如果是这样,那么较新版本库的
SONAME
应该与较旧版本库不同,这有助于在运行时获得正确的链接。如果库名称不受影响,您可以尝试检查生成系统是否可以更改生成库的
SONAME
,或者让链接器设置它链接的所有程序的
RPATH
。我对这两种方法都没有经验

在Gentoo上,
/usr/bin/gcc
似乎是某种包装器,而实际的程序以
/usr//gcc-bin//gcc
等形式结束。至少从这个角度来看,Ubuntu并没有在默认的gcc版本中这样做,尽管在Android的交叉编译中使用了类似的东西。我猜该设置是在配置时匹配
--bindir
的结果