对于这个问题的简单性,我深表歉意,但是我的背景是Windows上的Visual Studio C ++开发,我试图弄清楚Linux中C ++开发的工作方式。我对GCC版本和libc版本感到有些困惑。
在Windows中,通常具有与编译器版本耦合的C标准库版本。例如,如果我使用VS2013构建程序,则需要使用我的应用程序重新分发特定的C运行时DLL。例如msvcr120.dll
我试图弄清楚它在Linux世界中是如何工作的。我使用开发工具安装了CentOS 7,并创建了一个简单的hello world应用程序。默认情况下会安装GCC 4.8.5,所以我使用了它,然后在我的应用程序上执行了“ ldd foo”。 ldd打印出/lib64/libc.so.6,如果我检查libc.so.6,我会看到它是版本2.17,并使用GCC CC 4.8.5编译。这完全有道理。
根据https://www.softwarecollections.org/en/scls/rhscl/devtoolset-7/
上的说明,我在安装和使用devtoolset-7时会感到困惑。安装后,“ gcc --version”告诉我我有GCC 7.3.1,并且该二进制文件位于/ opt / rh / devtoolset-7 / root / usr / bin / gcc中。这很清楚。尚不清楚的是,当我在新二进制文件上执行“ ldd foo”时,仍然看到/lib64/libc.so.6,经检查仍为使用GCC 4.8.5构建的2.17版本。我的程序仍然运行,但是我不知道它是如何工作的。 libc.so.6与GCC 4.3.1的ABI会不会有所不同?来自Windows世界,我希望看到GCC 7.3.1将使用的另一个版本的libc.so.n。
libstdc ++。so.6使我更加困惑。当然,GCC 4.8.5和7.3.1具有C ++ 11及更高版本的不同实现。如何运作?
感谢所有可以帮助我了解C运行时如何在Linux上的不同编译器版本中工作的信息。