When compiling C++ files using cc , you might face an error of :
/*Error output under macOS .*/
Undefined symbols for architecture x86_64:
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in tmp-685d18.o
...
/*Error output under freeBSD .*/
ld: error: undefined symbol: std::__1::cout
>>> referenced by tmp.cpp
>>> /tmp/tmp-6ef42a.o:(main)
ld: error: undefined symbol: std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)
>>> referenced by tmp.cpp
>>> /tmp/tmp-6ef42a.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))
...
...
This is a linker problem , an example of a source file which generates this error is :
#include<iostream>
int main(void ){
std::cout << "Hello world" ; }
In this case the C++ standard library was used , and the linker was unable to figure it out .
This can be solved by compiling using :
$ cc -Xlinker -lc++ file.cpp /* The -Xlinker option , is used to pass arguments to the linker . In this case , the passed argument is the library to use when linking , which is the c++ standard library .*/
