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