Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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++ 链接到gcc的旧版本_C++_Linux_Gcc_Dynamic Linking - Fatal编程技术网

C++ 链接到gcc的旧版本

C++ 链接到gcc的旧版本,c++,linux,gcc,dynamic-linking,C++,Linux,Gcc,Dynamic Linking,我有CentOS 6.2(64位,默认为gcc 4.4.6)。不幸的是,我的代码只使用gcc 3.4.6进行编译,所以我(从源代码)在/home/rajat/local下单独安装了gcc。在链接一个简单的“Hello World”程序时,我得到以下信息 >ldd a.out linux-vdso.so.1 => (0x00007fff215ff000) libstdc++.so.6 => /home/rajat/local/lib64/libstdc++.so.6 (0x0

我有CentOS 6.2(64位,默认为gcc 4.4.6)。不幸的是,我的代码只使用gcc 3.4.6进行编译,所以我(从源代码)在/home/rajat/local下单独安装了gcc。在链接一个简单的“Hello World”程序时,我得到以下信息

>ldd a.out 
linux-vdso.so.1 =>  (0x00007fff215ff000)
libstdc++.so.6 => /home/rajat/local/lib64/libstdc++.so.6 (0x00007f11853e7000)
libm.so.6 => /lib64/libm.so.6 (0x00000033be400000)
libgcc_s.so.1 => /home/rajat/local/lib64/libgcc_s.so.1 (0x00007f11851ce000)
libc.so.6 => /lib64/libc.so.6 (0x00000033bd000000)
/lib64/ld-linux-x86-64.so.2 (0x00000033bcc00000)
虽然stdc++和gcc链接到我的3.4.6库,但libm和libc仍然链接到默认库。这样行吗??3.4.6安装也没有生成libm或libc库?

是的,没关系

libc/libm是glibc的一部分,而不是gcc编译器。另一方面,libstdc++是gcc的一部分。

是的,没关系


libc/libm是glibc的一部分,而不是gcc编译器。另一方面,libstdc++是gcc的一部分。

/lib
/usr/lib
中的库以及它们的64位对应项是系统范围的库。它们应该是编译器中立的,除GCC之外的其他编译器也可以链接到它们,而且它们确实可以,特别是因为
libc
是与操作系统内核接口的唯一可移植方式

libc
编写器非常小心地编写头文件,使不同的编译器生成相同的二进制内存对象,以便与库中的代码正确地交互。此外,还有一个定义良好的OS ABI接口,所有编译器都遵循该接口,以便彼此兼容。对于C以外的语言,这可能不是真的,例如来自不同C++编译器版本的对象文件很少能很好地相互配合。
特定于编译器的库不安装在
/lib
/usr/lib
中,有时可以静态链接,以便删除依赖关系。
/lib
/usr/lib
中的库及其64位对应库是系统范围的库。它们应该是编译器中立的,除GCC之外的其他编译器也可以链接到它们,而且它们确实可以,特别是因为
libc
是与操作系统内核接口的唯一可移植方式

libc
编写器非常小心地编写头文件,使不同的编译器生成相同的二进制内存对象,以便与库中的代码正确地交互。此外,还有一个定义良好的OS ABI接口,所有编译器都遵循该接口,以便彼此兼容。对于C以外的语言,这可能不是真的,例如来自不同C++编译器版本的对象文件很少能很好地相互配合。
编译器特定的库不安装在
/lib
/usr/lib
中,有时可以静态链接,以便删除依赖项。

这看起来是个坏主意;您需要更新您的代码以使用更现代的编译器进行编译。@trojanfoe-是的,我知道这是个坏主意。但不幸的是,目前我不得不接受它。这看起来是个坏主意;您需要更新您的代码以使用更现代的编译器进行编译。@trojanfoe-是的,我知道这是个坏主意。但不幸的是,目前我不得不接受它。请注意,发行版默认libstdc++位于其中一个库/文件夹中,但该库至少相当依赖于gcc的主要版本。请注意,发行版默认libstdc++位于其中一个库/文件夹中,然而,该库至少相当依赖于gcc的主要versjon。