[Mac OS 10.13.2, Xcode9.2]
Clang has a flag -stdlib
which, according to both clang++ -cc1 --help
(same as clang -cc1 --help
) and the LLVM documentation page, allows specification of the C++ standard library to use
.
1) How does this flag impact on compilation? I.e. does it change the order of library include paths etc.
2) How does this flag impact linking? I.e. is it just a short-cut/alternative for supplying -lc++
?
I am really interested in understanding the details of this flag because I can't find any documentation describing it's precise behaviour and it is causing havoc with our build system since the Xcode9 upgrade. Inclusion of -stdlib=libc++
in our Makefile causes the compilation to fail due to headers problems, yet, when -stdlib=libc++
is omitted, our projects compile fine (presumably because libc++
is the Mac OS default Standard C++ library). The project link against libc++
due to other linker flags -lc++
and -lsupc++
.
Some background info about our use-case
We are using Clang to cross-compile to a -march=i686 -target i686-linux-elf
target. Prior to the Xcode9 update, our build system was working fine. Since the upgrade we're getting compiler errors, such as:
/usr/local/our-target/sysroot/usr/local/include/c++/v1/stdlib.h:111:82: error: use of undeclared identifier 'labs'; did you mean 'abs'?
inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) _NOEXCEPT {return labs(__x);}
I've now been able to fix this problem by changing the header include paths. Namely I have removed a path reference to the folder that is parent to both the libc++ AND gcc4.8.5 includes.
# -I${STAGING.nao}/usr/local/include/c++ \
-I${STAGING.nao}/usr/local/include/c++/v1
I am still very interested in understanding the details of what the flag does.