编译boost C ++ 11 clang mac找不到cstddef

时间:2012-11-15 19:14:02

标签: c++ boost c++11 clang

我无法使用Mac OS x 10.8.2上的clang 3.1编译boost。

这就是我所做的:

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

我也尝试过没有计时,测试,波动和信号。 我尝试了一个带有

的user-config.jam
using clang-darwin

这是我几乎每个文件都有的错误:

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

有点类似于How to compile/link Boost with clang++/libc++?

谢谢: - )

更新: 我安装了最新的Xcode 4.5.2并安装了命令行工具。

以下是控制台输出的一部分:

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.

构建Boost C ++库。

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

组件配置:

- 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"

3 个答案:

答案 0 :(得分:6)

您似乎忘记了将clac ++标题与clang一起安装。

如果您不想安装标题,请尝试Apple分发的clang版本作为Command Line Tools包的一部分;它已通过更多测试,并且已经正确设置。

答案 1 :(得分:4)

我终于在几个小时后修复了我的问题。

Homebrew正在弄乱我的路径,由于某种原因,我的clang找不到libc ++标题。

有一个错误是提升1.52。

请参阅Boost numeric limits bug

我必须编辑文件:

boost/config/stdlib/libcpp.hpp

并修补它:

#if _LIBCPP_VERSION < 1002 
#   define BOOST_NO_CXX11_NUMERIC_LIMITS 
#endif 

现在提升正在建设......

答案 2 :(得分:-2)

对于Ubuntu 16.04,我可以使用gcc使用c ++ 11构建boost:

cd / home / user / install / boost / boost_1_54 /

./ bootstrap.sh --with-toolset = gcc

./ b2 toolset = gcc cxxflags =&#34; -std = c ++ 11 -I / usr / include / c ++ / 5 / -I / usr / include / x86_64-linux-gnu / c ++ / 5 / &#34;

mkdir ../ 2

./ b2 install --prefix = .. / 2 /

构建程序的命令:

g ++ -std = c ++ 11 -O2 fprint.cpp -o fprint -I / home / user / install / boost / 2 / include / -L / home / user / install / boost / 2 / lib / - lboost_regex -lboost_program_options

在此之前命令是:

g ++ -std = c ++ 11 fprint.cpp -o fprint -lboost_regex -lboost_program_options

,但是这个旧命令(在以前的操作系统和升级/等之前运行良好)不再起作用了 &#34; 对boost :: re_detail_106501的未定义引用 &#34; (由/tmp/cc0Zn8lo.o说:在函数`bool boost :: regex_search ...)

((如果我不使用&#34; -I / usr / include / c ++ / 5 / -I / usr / include / x86_64-linux-gnu / c ++ / 5 /&#34;对于./b2,那么错误是&#34;在构建提升期间无法找到cstddef&#34;所以与此票证的主题完全相同))