2016-08-24 49 views
-3

从同一源文件中获取两个二进制文件:一个使用clang ++ - 3.6编译,另一个使用g ++ - 4.8编译。在从stl(std :: unique,特别是)调用函数时,gdb将我带到相同的文件:/usr/include/c++/4.8/bits/stl_algo.h。使用不同编译器的相同STL文件

虽然我希望每个编译器的实现都不同。 clang和gcc是否共享C++实现的一部分?

+2

取决于你如何使用它们。他们使用头文件和他们被告知使用的库。 –

回答

1

我希望每个编译器的实现都不同。 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 ++)

相关问题