Boost logo

Boost Users :

From: Olivier Delalleau (delallea_at_[hidden])
Date: 2005-10-13 14:15:55


I'm getting some annoying errors when compiling some of the libraries of
Boost 1.33.0 with Intel Compiler 9.0 (icpc (ICC) 9.0 20050811) under
Linux.
Here is what happens when I try to compile (again after a first try
which failed to update all targets):

-----------------------------------------------------------------------------------

../boost-jam-3.1.11-1-linuxx86/bjam -sTOOLS=intel-linux
--prefix=/RQusagers/delallea/local
--builddir=/RQexec/delallea/boost_1330_90 -sPYTHON_VERSION=2.4
--with-python-root=/usr/network.ALTIX/python-2.4.1 -sINTEL_VERSION=90
-sINTEL_PATH=/opt/intel/compiler90 install

Building Boost.Regex with the optional Unicode/ICU support disabled.
Please refer to the Boost.Regex documentation for more information
(and if you don't know what ICU is then you probably don't need it).
...found 14461 targets...
...updating 104 targets...
intel-linux-C++-action
/RQexec/delallea/boost_1330_90/bin/boost/libs/iostreams/build/libboost_iostreams.a/intel-linux/debug/file_descriptor.o
/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/boost/iostreams/positioning.hpp(45):
error: no suitable conversion function from "mbstate_t" to
"std::streampos={std::streamoff={long}}" exists
      return std::streampos(std::mbstate_t(), off);
                            ^

/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/boost/iostreams/positioning.hpp(45):
error: expected a ")"
      return std::streampos(std::mbstate_t(), off);
                                            ^

/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/boost/iostreams/positioning.hpp(51):
error: no suitable conversion function from "fpos_t" to
"boost::iostreams::stream_offset={intmax_t={long}}" exists
      return pos;
             ^

/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/boost/iostreams/positioning.hpp(64):
error: expression must have class type
      return fpos_t_to_offset(pos.seekpos()) +
                              ^

/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/boost/iostreams/positioning.hpp(66):
error: expression must have class type
             stream_offset(std::streamoff(pos.seekpos()));
                                          ^

compilation aborted for
/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/libs/iostreams/build/../src/file_descriptor.cpp
(code 2)

    . /opt/intel/compiler90/bin/iccvars.sh
    icpc -c -w1 -g -O0
-I"/RQexec/delallea/boost_1330_90/bin/boost/libs/iostreams/build"
-I"/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0"
-I"/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0" -o
"/RQexec/delallea/boost_1330_90/bin/boost/libs/iostreams/build/libboost_iostreams.a/intel-linux/debug/file_descriptor.o"
"/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/libs/iostreams/build/../src/file_descriptor.cpp"

...failed intel-linux-C++-action
/RQexec/delallea/boost_1330_90/bin/boost/libs/iostreams/build/libboost_iostreams.a/intel-linux/debug/file_descriptor.o...

-----------------------------------------------------------------------------------

Then other similar errors in iostreams...

Now, the important detail: I have in my icpc.cfg the following line:
    -I/opt/intel/compiler90/include/c++
which forces the Intel compiler to (preferably) use its own includes.
Otherwise it uses the g++ standard includes and (at least for the file
above) compilation works fine. But I would really prefer to be able to
compile Boost using only the Intel code (especially since I need this
line in my icpc.cfg for some other non-Boost stuff to compile).

Then when compiling the regex library I have other errors. Here is an
example of what happens with a specific compile line (here I cleaned my
icpc.cfg file):

-----------------------------------------------------------------------------------

icpc -I/opt/intel/compiler90/include/c++ -c -w1 -DNDEBUG -DNDEBUG -O3
-openmp -I"/RQexec/delallea/boost_1330_90/bin/boost/libs/regex/build"
-I"/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0" -o
"/RQexec/delallea/boost_1330_90/bin/boost/libs/regex/build/libboost_regex.a/intel-linux/release/threading-multi/instances.o"
"/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/libs/regex/build/../src/instances.cpp"

/RQMNT/exec1/lisa/delallea/boost_src/boost_1_33_0/boost/regex/v4/instances.hpp(84):
error #803: function "boost::match_results<BidiIterator,
Allocator>::match_results(const boost::match_results<BidiIterator,
Allocator> &) [with BidiIterator=const char *,
Allocator=std::vector<boost::sub_match<const char *>,
std::allocator<boost::sub_match<const char *>>>::allocator_type]"
explicitly instantiated more than once
  template class BOOST_REGEX_DECL match_results<
std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >;

-----------------------------------------------------------------------------------

There are many errors like this one. Again, if I remove the include command
    -I/opt/intel/compiler90/include/c++
it works fine. Also if I use the intel 8.0 includes it works fine (but
not intel 8.1).

Any help fixing these errors (actually, mainly the regex one, as this
is the library I really need) will be much appreciated :)

--
Olivier

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net