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