3

During source installation of boost-libs (link to cvs repo), I get the following at the very end of long output of bmake (make that's used in the package manager pkgsrc that I use) and build seems to fail:

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

I noticed, out of thousands of output lines (full output), some lines of error repeatedly appear. I just except some (they don't occur back to back like the following):

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

```

Other boost-related packages (namely boost-headers, boost-jam, boost-docs, boost-build) are already built and installed. boost-python fails but I think it's not depended.

Using QNX 6.5.0 SDP SP1

Thank you.


Update) Responding to @Igor R's comment. Out of many stdint.h found like this:

# 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

it seems to me intleast8_t is defined in /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;
TemplateRex
  • 69,038
  • 19
  • 164
  • 304
IsaacS
  • 3,551
  • 6
  • 39
  • 61
  • 1
    Could you check whether `` on your platform defines `intleast8_t` type? Boost assumes that there exists such (a non-standard) type on QNX. – Igor R. Jul 15 '13 at 11:43
  • 1
    So, now the question is whether `__EXT_QNX` macro is defined... I'd try to change `boost/cstdint.hpp` (line 69) to: `#if defined(__QNX__) && defined(__EXT_QNX)`. Of course, it's just an ad-hoc patch. – Igor R. Jul 15 '13 at 12:13
  • @Igor R your ad-hoc patch idea worked for the errors related to `/boost/cstdint.hpp`. Post it as an answer if you like so that I can upvote. – IsaacS Jul 16 '13 at 01:18
  • @IsaacS any updates on the -pthread issue? Have you found a workaround for that? – damjan Aug 21 '14 at 13:15

1 Answers1

2

Boost assumes that QNX defines non-standard type names:

#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;

But according to what you see in /usr/include/stdint.h, QNX already deprecated these types, and now they are defined only if __EXT_QNX is defined. So, the following ad-hoc patch to boost/cstdint.hpp could help:

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. 

The better way, however, would be to understand since what QNX version the standard types are available, and to define more robust condition.

Igor R.
  • 14,716
  • 2
  • 49
  • 83
  • @IssacS so did you finally manage to compile boost for QNX 6.5.0 ?. I ask because , am running into issues around filesystem module – a k Oct 29 '18 at 03:15