为什么cc可以编译一个c++程序?



我有一个适用于macOS和Linux的makefile,其中包含以下命令:

cc -std=c++14 foo.cpp bar.cpp

而且编译得很好。 顾名思义,foo.cppbar.cpp是C++文件,它包含C++11语法。编译工作正常。

现在,如果我包含<fstream>,我会得到数百个链接器错误。我想知道,为什么会这样?

Undefined symbols for architecture x86_64:
"std::__1::locale::has_facet(std::__1::locale::id&) const", referenced from:
bool std::__1::has_facet<std::__1::codecvt<char, char, __mbstate_t> >(std::__1::locale const&) in DiceInvaders-6f5dd4.o
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
...

Afaik,cc链接到 c 编译器,我认为由于它的自动检测,它使用 C++ 编译器编译它。但是,为什么它因包含额外的C++而失败呢?

系统上是否有c++cc对应物?如果我使用g++,我会假设该命令可用,如果用户实际上想使用他的首选项编译器(如在 cc 中(编译它怎么办?

编辑:$(CXX)cc的良好替代品吗?

系统上最有可能cc是指向gcc可执行文件的符号链接。假设这是真的:

引用手册页的gccg++之间的区别是:

g++ 是一个调用 GCC 并自动指定针对C++库的链接的程序。

因此,当您调用gcc时,它不会链接到c ++库。您可以手动链接标准 c++ 库:

gcc -lstdc++ 1.cpp

系统上是否有 cc for c++ 的对应物?

cc命令只是大多数系统遵循的约定。它没有标准化,至少我没有听说过在哪里,实用程序c99被 posix 标准化。在我的带有 archlinux 发行版的 linux 系统上,gcc软件包还安装了符号链接/usr/bin/c++g++

相关内容

  • 没有找到相关文章

最新更新