-lstdc++ 和 -lstdc++11 之间的区别

Difference between -lstdc++ and -lstdc++11

调用编译器标志“-lstdc++”会调用哪些标准? 与“-lstdc++11”一样,c++11 标准被调用,同样可以被“-std=c++11”调用。

-l 标志不会改变标准一致性,它用于指定 link 使用哪些库。

因此,-lstdc++ 将 link 与名为 libstdc++.alibstdc++.so 的库一起使用。在我的系统上,可以在 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 找到该库,但在您的系统上通常会有所不同。

这与指定 -lSDL 之类的内容没有什么不同,其中 links 与 libSDL.so,或指定 -lpng,其中 links 与 libpng.so.

如果要使用特定版本的 C++ 标准,请使用 -std 选项(如 -std=c++11)。这也会 link 正确的库,所以你不需要做任何其他事情(比如使用任何 -l 选项)。

您没有在此处指定编译器,但我们假设它是 clang++g++ 或类似的东西。

然后标志 -l<library> 简单地指定在 linking 时应该搜索库 <library>。此搜索将包括搜索目录的标准列表以及可能已添加到库路径的其他内容。

因此标志 -lstdc++ 只是表示应该在 link 时间搜索库。它对编译器认为正在编译的 c++ 版本没有影响

相比之下,标志 -std=c++ 通常用作编译器的开关:

  • 表示使用的c++版本;
  • 自动将相应的库和包含路径添加到搜索路径