Problem of ROOT 5.22 and INTEL 11.0.74

Dear Rooters,

I installed ROOT 5.22 on Fedora 10 ( v86-64) using gcc 4.3.2 without problems.
When I tried to install the same ROOT using Intel icc 11.0.74 the next error arose:

icc -O -fPIC -Iinclude -DR__HAVE_CONFIG -DG__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__OSFDLL -DG__ROOT -DG__REDIRECTIO -DG__STD_EXCEPTION -DG__64BIT -wd1572 -DG__HAVE_CONFIG -DG__NOMAKEINFO -DG__CINTBODY -Icint/cint/inc -Icint/cint/src -Icint/cint/src/dict -pthread -Icint/cint/lib/gcc3strm -I. -o cint/cint/src/dict/gcc3strm.o -c cint/cint/src/dict/gcc3strm.cxx
cint/cint/src/dict/gcc3strm.cxx(311): error: class “std::fpos<mbstate_t>” has no member "operator=="
G__letint(result7, 103, (long) ((fpos<mbstate_t>) G__getstructoffset())->operator==((fpos<mbstate_t>*) libp->para[0].ref));
^

cint/cint/src/dict/gcc3strm.cxx(317): error: class “std::fpos<mbstate_t>” has no member "operator!="
G__letint(result7, 103, (long) ((fpos<mbstate_t>) G__getstructoffset())->operator!=((fpos<mbstate_t>*) libp->para[0].ref));
^

cint/cint/src/dict/gcc3strm.cxx(608): warning #191: type qualifier is meaningless on cast type
, (const char_traits::char_type) G__int(libp->para[2])));
^

compilation aborted for cint/cint/src/dict/gcc3strm.cxx (code 2)
make: *** [cint/cint/src/dict/gcc3strm.o] Error 2

What can be done? In principal the version of ROOT translated by gcc may be used. But question remains.

Sincerely Yours,
Andrey

Please use the svn trunk or apply the following patch to config/Makefile.linuxicc:

root.cern.ch/viewvc/trunk/config … 3&r2=27229

Cheers, Fons.

Is it correct Makefile.linuxicc. I wrote about Fedora-64 and believe that the corresponding file is Makefile.linuxx8664icc. Nevertheless I modified both files as it was described.
The 1st result is

===============================================
XrdScheduler.cc:(.text+0x147c): undefined reference to std::cerr' XrdScheduler.cc:(.text+0x1488): undefined reference tostd::basic_ostream<char, std::char_traits >& std::operator<< <std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*)‘
XrdScheduler.cc:(.text+0x1493): undefined reference to std::ostream::operator<<(int)' XrdScheduler.cc:(.text+0x149e): undefined reference tostd::basic_ostream<char, std::char_traits >& std::operator<< <std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*)‘
XrdScheduler.cc:(.text+0x14a8): undefined reference to std::ostream::operator<<(int)' ../../lib/libXrd.a(XrdScheduler.o): In functionXrdFireWorker::~XrdFireWorker()’:
XrdScheduler.cc:(.gnu.linkonce.t._ZN13XrdFireWorkerD0Ev[.gnu.linkonce.t._ZN13XrdFireWorkerD0Ev]+0x10): undefined reference to operator delete(void*)' ../../lib/libXrd.a(XrdScheduler.o):(.gnu.linkonce.d._ZTI12XrdScheduler[.gnu.linkonce.d._ZTI12XrdScheduler]+0x0): undefined reference tovtable for __cxxabiv1::__si_class_type_info’
…/…/lib/libXrd.a(XrdScheduler.o):(.gnu.linkonce.d._ZTI13XrdFireWorker[.gnu.linkonce.d._ZTI13XrdFireWorker]+0x0): undefined reference to vtable for __cxxabiv1::__si_class_type_info' make[5]: *** [../../bin/XrdCnsd] Error 1 make[4]: *** [Linuxall] Error 2 make[3]: *** [all] Error 2 make[2]: *** [XrdCns] Error 2 make[1]: *** [all] Error 2 make[1]: Leaving directory/home/daniel/Soft/root/root/net/xrootd/src/xrootd’
make: *** [net/xrootd/src/xrootd/lib/libXrdSec.so] Error 2

When the xrootd was disabled than the result was

=============================================
Install proofserv wrapper.
bin/rmkdepend -R -fmain/src/hadd.d -Y -w 1000 – -fPIC -wd1476 -Iinclude -DR__HAVE_CONFIG -wd1572 -pthread -D__cplusplus – main/src/hadd.cxx
icc -O -fPIC -wd1476 -Iinclude -DR__HAVE_CONFIG -wd1572 -pthread -o main/src/hadd.o -c main/src/hadd.cxx
icpc -O -o bin/hadd main/src/hadd.o
-Llib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lMatrix -lMathCore -lThread -lm -ldl -pthread -rdynamic
lib/libThread.so: undefined reference to `__sync_fetch_and_add_4’
make: *** [bin/hadd] Error 1
rm core/utils/src/RStl_tmp.cxx core/utils/src/rootcint_tmp.cxx

Sincerely Yours,
Andrey

After making these changes, did you do a “make distclean” to strart a fresh compile?

If this does not work, try the svn trunk version.

Cheers, Fons.

The root directory was deleted and old tar file was reopened. After that I modified the Makefiles.
Sincerely Yours, Andrey

Hi,
I have the same issue with root 5.23.04 and icc 11.0.83, always on Fedora 10 x86-64.
Following the suggestions given for addressing a similar issue concerning the compilation of the boost C++ libraries in this environment, I found a possible workaround:
compile adding the following option to the compile flags

-D'__sync_fetch_and_add(ptr,addend)=_InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(ptr)), addend)'

In this way the unresolved symbol __sync_fetch_and_add_4 disappears from libThread.so, as it is now substituted with the resolved one _InterlockedExchangeAdd (which should perform the same operation).

The use of ‘__sync_fetch_and_add’ is due to the file /usr/include/c++/4.3.2/ext/atomicity.h, which is included by the root file core/thread/inc/TAtomicCountGcc.h. But the function __sync_fetch_and_add is not provided by the standard C++ library, as in gcc 4.3 it is a built-in function (and this function seems to be missing in icc 11.0 for intel64).

Regards,
Pier Paolo Peirano

Hi,

for me, upgrading to icc 11.1 fixed this issue on ubuntu 9.04 64bit.

Cheers, Axel.