Compilation errors with Intel Compiler 9.0 for Linux

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

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 :)
I believe this is fixed for 1.33.1, can you get hold of that from cvs (it's on the RC_1_33_0 branch), or would you like a zip to test? I'd like to be sure this really is fixed for the next release as you're not the only one with the problem. John.
participants (2)
-
John Maddock
-
Olivier Delalleau