Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compile boost C++11 clang mac cannot find cstddef

I cannot compile boost with clang 3.1 on Mac os x 10.8.2.

This is what I did:

./bootstrap.sh --with-toolset=clang
./b2 toolset=clang cxxflags="-std=c++11 -stdlib=libc++" linkflags="-stdlib=libc++"

I also tried without chrono, test, wave and signals. I tried a user-config.jam with

using clang-darwin

This is the error I have for almost every file:

/boost/config/select_stdlib_config.hpp:18:12: fatal error: 'cstddef' file not found

It is kind of similar to How to compile/link Boost with clang++/libc++?

Thank you :-)

Update: I do have the latest Xcode 4.5.2 with the command line tools installed.

Here is part of the console output:

Kikohs:trunk kikohs$ ./b2 toolset=clang cxxflags="-std=c++11 -stdlib=libc++" linkflags="-stdlib=libc++"
Performing configuration checks

- 32-bit                   : no
- 64-bit                   : yes
- x86                      : yes
- has_icu builds           : no
warning: Graph library does not contain MPI-based parallel components.
note: to enable them, add "using mpi ;" to your user-config.jam
    - gcc visibility           : yes
    - long double support      : no
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.

Building the Boost C++ Libraries.

- iconv (libc)             : no
- iconv (separate)         : yes
- icu                      : no
- icu (lib64)              : no

Component configuration:

- atomic                   : building
- chrono                   : building
- context                  : building
- date_time                : building
- exception                : building
- filesystem               : building
- graph                    : building
- graph_parallel           : building
- iostreams                : building
- locale                   : building
- math                     : building
- mpi                      : building
- program_options          : building
- python                   : building
- random                   : building
- regex                    : building
- serialization            : building
- signals                  : building
- system                   : building
- test                     : building
- thread                   : building
- timer                    : building
- wave                     : building

...patience...
...patience...
...patience...
...patience...
...found 8672 targets...
...updating 1127 targets...
common.mkdir bin.v2/libs/atomic
common.mkdir bin.v2/libs/atomic/build
common.mkdir bin.v2/libs/atomic/build/clang-darwin-4.2.1
common.mkdir bin.v2/libs/atomic/build/clang-darwin-4.2.1/debug
clang-darwin.compile.c++ bin.v2/libs/atomic/build/clang-darwin-4.2.1/debug/lockpool.o
In file included from libs/atomic/src/lockpool.cpp:1:
./boost/atomic.hpp:10:10: fatal error: 'cstddef' file not found
#include <cstddef>
     ^
1 error generated.

"clang++" -x c++ -O0 -g -std=c++11 -stdlib=libc++ -O0 -fno-inline -Wall -g -DBOOST_ALL_NO_LIB=1 -DBOOST_ATOMIC_DYN_LINK=1 -DBOOST_ATOMIC_SOURCE -I"." -c -o "bin.v2/libs/atomic/build/clang-darwin-4.2.1/debug/lockpool.o" "libs/atomic/src/lockpool.cpp"
like image 911
Kirell Avatar asked Nov 15 '12 19:11

Kirell


2 Answers

It looks like you forgot to install the libc++ headers alongside clang.

If you don't want to mess with installing the headers, try the version of clang distributed by Apple as part of the Command Line Tools package; it's been through more testing, and it's already set up properly.

like image 78
servn Avatar answered Oct 19 '22 06:10

servn


I finally fixed my problem after many hours.

Homebrew was messing with my path and for some reason my clang could not find the libc++ headers.

There is a bug is boost 1.52.

See Boost numeric limits bug

I had to edit the file :

boost/config/stdlib/libcpp.hpp

and patch it:

#if _LIBCPP_VERSION < 1002 
#   define BOOST_NO_CXX11_NUMERIC_LIMITS 
#endif 

Now boost is building properly ...

like image 32
Kirell Avatar answered Oct 19 '22 05:10

Kirell