我有一个适用于macOS和Linux的makefile,其中包含以下命令:
cc -std=c++14 foo.cpp bar.cpp
而且编译得很好。 顾名思义,foo.cpp
和bar.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
可执行文件的符号链接。假设这是真的:
引用手册页的gcc
和g++
之间的区别是:
g++ 是一个调用 GCC 并自动指定针对C++库的链接的程序。
因此,当您调用gcc
时,它不会链接到c ++库。您可以手动链接标准 c++ 库:
gcc -lstdc++ 1.cpp
系统上是否有 cc for c++ 的对应物?
cc
命令只是大多数系统遵循的约定。它没有标准化,至少我没有听说过在哪里,实用程序c99
被 posix 标准化。在我的带有 archlinux 发行版的 linux 系统上,gcc
软件包还安装了符号链接/usr/bin/c++
以g++
。