У меня есть make-файл для macOS и Linux, который содержит следующую команду:
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 ++?
Есть ли в системе аналог cc
для c++
? Если я использую g++
, я бы предположил, что команда доступна, и что, если пользователь на самом деле хотел скомпилировать ее со своим предпочтительным компилятором (как в cc)?
Редактировать: $(CXX)
хорошозамена для cc
?