2016-04-11 52 views

回答

2

-l标志不会更改标准一致性,它用于指定要链接的库。

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

这无异于指定类似-lSDL,与libSDL.so链接,或指定-lpng,这与libpng.so链接不同。

如果要使用某个版本的C++标准,请使用-std选项(如-std=c++11)。这也将链接正确的库,所以你不需要做任何事情(如使用任何-l选项)。

+0

但即使添加我的情况下“-std = C++ 11”,但是这是越来越包括的是“库 - lstdC++“而不是”-lstdC++ 11“。 – geek

+1

@geek:没关系,那只是图书馆的名字。编译器也被称为'g ++',你不需要使用一个名为'g ++ 11'的不同编译器。 –

+0

@geek当然,这个库仍然被称为'stdC++'...你可能会在文件系统上发现它实际上是一个不同的库 – donkopotamus

2

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

然后,标志-l<library>只是指定链接时应搜索库<library>。该搜索将包括搜索目录的标准列表以及可能已添加到库路径的其他搜索目录。

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

相反,标志-std=c++通常充当切换到编译器:

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