链接到旧版本的 gcc
Linking to older version of gcc
我有 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 的一部分。
/lib
和 /usr/lib
中的库及其 64 位对应项是系统范围的库。它们应该是编译器中立的,除了GCC之外的其他编译器也可以链接到它们,而且它们实际上确实如此,特别是因为libc
是与操作系统内核接口的唯一可移植方式。
libc
编写器非常注意编写头文件,以使不同的编译器生成相同的二进制内存对象,以便与库中的代码正确交互。此外,还有一个定义明确的OS ABI接口,所有编译器都遵循该接口,以便彼此兼容。对于 C 以外的语言来说,这可能并非如此,例如,来自不同C++编译器版本的目标文件很少彼此配合得很好。
特定于编译器的库未安装在/lib
或/usr/lib
中,有时可以静态链接,以便可以删除依赖项。
相关文章:
- 如何指示 cmake 的 gcc 版本?
- g++ libstdc++.so.6:从 4.8.5 升级到 GCC 版本 7.3.0 后找不到版本 'CXXABI_1.3.9'
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- glibc 版本比 gcc 版本和 -wl,-rpath 不工作
- 三元运算符 '?:' 在 4.9.0 之前的 GCC 版本中推断出不正确的类型?
- 与NVIDIA链接的错误GCC版本
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- 不同的内在行为取决于 GCC 版本
- cblas_layout在MKL.H的GCC版本中未声明
- 将GCC版本升级到发行版附带的版本以外的版本是否有任何问题
- Linux 中 gcc 4.3 版本的编译问题
- GCC 版本/标志和 FAM
- 如何让 CMake 基于 GCC 版本通过 std=c++14/c++1y 或 c++17/c++1z?
- 我已安装的GCC版本是我已安装的RedHat开发人员工具集的背后
- GLIBCXX(libstdc++.so.6)与gcc版本之间的关系
- 如何获得GCC版本支持特定功能
- 如何更改Python GCC与GCC 4.8版本结合
- 使用 Eclipse 检查 GCC 版本
- gcc版本显示4.2.1,即使在安装了4.9(Homebrew)之后也是如此
- CMake发现错误的gcc版本