boost-libs无法构建

时间:2013-07-15 11:12:33

标签: c++ boost qnx

boost-libslink to cvs repo)的源代码安装过程中,我在包管理器make中使用的bmake(pkgsrc)的长输出结束时得到以下内容我使用)和构建似乎失败了:

...skipped <pbin.v2/libs/wave/build/gcc-4.4.2/release/link-static/threading-multi>libboost_wave.a for lack of <pbin.v2/libs/wave/build/gcc-4.4.2/release/link-static/threading-multi>instantiate_cpp_exprgrammar.o...
...skipped <pstage/lib>libboost_wave.a for lack of <pbin.v2/libs/wave/build/gcc-4.4.2/release/link-static/threading-multi>libboost_wave.a...
...failed updating 181 targets...
...skipped 280 targets...
*** Error code 1

Stop.
bmake: stopped in /usr/pkgsrc/devel/boost-libs
*** Error code 1

我注意到,在数千条输出行(full output)中,重复出现了一些错误行。我只是除了一些(他们不会像以下一样背靠背发生):

g++: unrecognized option '-pthread'
./boost/cstdint.hpp:74: error: 'intleast8_t' in namespace '::' does not name a type
./boost/cstdint.hpp:76: error: 'uintleast8_t' in namespace '::' does not name a type
./boost/chrono/detail/inlined/posix/chrono.hpp:23: error: '::clock_gettime' has not been declared
./boost/chrono/detail/inlined/posix/chrono.hpp:36: error: '::clock_gettime' has not been declared
./boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp:31: error: '::sysconf' has not been declared
./boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp:31: error: '_SC_CLK_TCK' was not declared in this scope
/usr/qnx650/host/qnx6/x86/usr/bin/ntox86-ld: cannot find -lrt
./boost/smart_ptr/detail/yield_k.hpp:123: error: 'nanosleep' was not declared in this scope
./boost/thread/pthread/timespec.hpp:84: error: '::clock_gettime' has not been declared
./boost/thread/pthread/mutex.hpp:275: error: 'boost::chrono::steady_clock' has not been declared
libs/filesystem/src/operations.cpp: In function 'bool<unnamed>::remove_directory(const boost::filesystem::path&)':
libs/filesystem/src/operations.cpp:345: error: '::rmdir' has not been declared
libs/filesystem/src/operations.cpp:348: error: '::unlink' has not been declared
libs/filesystem/src/operations.cpp:427: error: no matching function for call to 'stat::stat(const char*, stat*)'
libs/filesystem/src/operations.cpp:1003: error: '::symlink' has not been declared

```

已经构建并安装了其他boost相关的软件包(即boost-headers,boost-jam,boost-docs,boost-build)。 boost-python失败,但我认为这不是依赖。

使用QNX 6.5.0 SDP SP1

谢谢。


更新)回应@Igor R的评论。在许多stdint.h中找到了这样的内容:

# find /usr -iname 'stdint.h'
/usr/share/pkgsrc/archivers/gtar-base/work/tar-1.26/gnu/stdint.h
/usr/qnx650/target/qnx6/usr/include/c++/4.4.2/tr1/stdint.h
/usr/qnx650/target/qnx6/usr/include/stdint.h
/usr/include/c++/4.4.2/tr1/stdint.h
/usr/include/stdint.h

intleast8_t中定义了/usr/include/stdint.h

# more /usr/include/stdint.h
:
#if defined(__EXT_QNX)
/*
 * These types are deprecated and applications should use the
 * int_/uint_ types defined below.
 */
typedef _Intleast8t             intleast8_t;
typedef _Uintleast8t            uintleast8_t;

1 个答案:

答案 0 :(得分:2)

Boost假设QNX定义了非标准类型名称:

#ifdef __QNX__

// QNX (Dinkumware stdlib) defines these as non-standard names.
// Reflect to the standard names.

typedef ::intleast8_t int_least8_t;
typedef ::intfast8_t int_fast8_t;

但是根据您在/usr/include/stdint.h中看到的内容,QNX已经弃用了这些类型,现在只有在定义了__EXT_QNX时才定义它们。因此,以下针对boost/cstdint.hpp的临时补丁可能有所帮助:

9 9   # endif 
10 10    
11    - #ifdef __QNX__ 
11    + #if defined(__QNX__) && defined(__EXT_QNX) 
12 12    
13 13   // QNX (Dinkumware stdlib) defines these as non-standard names. 

然而,更好的方法是了解QNX版本的标准类型是什么,并定义更强大的条件。