从同一源文件中获取两个二进制文件:一个使用clang ++ - 3.6编译,另一个使用g ++ - 4.8编译。在从stl(std :: unique,特别是)调用函数时,gdb将我带到相同的文件:/usr/include/c++/4.8/bits/stl_algo.h。使用不同编译器的相同STL文件
虽然我希望每个编译器的实现都不同。 clang和gcc是否共享C++实现的一部分?
从同一源文件中获取两个二进制文件:一个使用clang ++ - 3.6编译,另一个使用g ++ - 4.8编译。在从stl(std :: unique,特别是)调用函数时,gdb将我带到相同的文件:/usr/include/c++/4.8/bits/stl_algo.h。使用不同编译器的相同STL文件
虽然我希望每个编译器的实现都不同。 clang和gcc是否共享C++实现的一部分?
我希望每个编译器的实现都不同。 clang和gcc是否共享C++实现的一部分?
这并不是说它们共享相同的C++实现,而是两个编译器在系统上默认使用相同的标准C++库。
我认为你是在linux上,几乎所有的程序都是从软件包管理器链接安装libstdC++(由g ++提供)。
默认情况下,即使使用clang ++进行编译,也会使用libstdC++,因此,例如,当您包含iostream时,它会使用/usr/include/c++/4.8中的一个。
如果你想针对LLVM C++库链接,您需要安装“的libC++ - 开发”包(名字可能根据你的发行版有所不同),并编译使用:-stdlib =的libC++(而不是默认:-stdlib = libstdC++)。
例如:
TEST.CPP:
#include <iostream>
int main(int argc, char *argv[])
{
std::cout << "Hello World!!!\n";
return 0;
}
编译使用:
$ clang++ -stdlib=libc++ -o test test.cpp
将使用标头从/ usr /包括/ C++/V1(从LLVM)使用:
012编写$ clang++ -stdlib=libstdc++ -o test test.cpp
# or (assuming the default on your system is libstdc++)
$ clang++ -o test test.cpp
将利用头球/usr/include/c++/4.8(从G ++)
取决于你如何使用它们。他们使用头文件和他们被告知使用的库。 –