Version: (using KDE Devel) Installed from: Compiled sources Compiler: icpc version 9.1 Intel(R) C++ Compiler for 32-bit applications, Version 9.1 Build 20061103Z Package ID: l_cc_c_9.1.045 OS: Linux Trying to compile taglib with the Intel C++ compiler (icpc) fails: make -f taglib/taglib/CMakeFiles/tag.dir/build.make taglib/taglib/CMakeFiles/tag.dir/depend make[2]: Entering directory `/home/bradh/build/kdesupport-build' make[2]: Nothing to be done for `taglib/taglib/CMakeFiles/tag.dir/depend'. make[2]: Leaving directory `/home/bradh/build/kdesupport-build' make -f taglib/taglib/CMakeFiles/tag.dir/build.make taglib/taglib/CMakeFiles/tag.dir/build make[2]: Entering directory `/home/bradh/build/kdesupport-build' /usr/bin/cmake -E cmake_progress_report /home/bradh/build/kdesupport-build/CMakeFiles 77 [ 77%] Building CXX object taglib/taglib/CMakeFiles/tag.dir/mpeg/mpegfile.o /opt/intel/cc/9.1.045/bin/icpc -Dtag_EXPORTS -fPIC -I/home/bradh/build/kdesupport-build/taglib/taglib -I/home/bradh/coding/kdesupport/taglib/taglib -I/home/bradh/coding/kdesupport/taglib/taglib/toolkit -I/home/bradh/coding/kdesupport/taglib/taglib/mpeg -I/home/bradh/coding/kdesupport/taglib/taglib/ogg -I/home/bradh/coding/kdesupport/taglib/taglib/flac -I/home/bradh/coding/kdesupport/taglib/taglib/mpc -I/home/bradh/coding/kdesupport/taglib/taglib/ogg/vorbis -I/home/bradh/coding/kdesupport/taglib/taglib/mpeg/id3v2 -I/home/bradh/coding/kdesupport/taglib/taglib/mpeg/id3v1 -I/home/bradh/coding/kdesupport/taglib/taglib/ape -I/home/bradh/build/kdesupport-build/taglib/taglib/taglib -I/home/bradh/build/kdesupport-build/taglib/taglib/.. -o taglib/taglib/CMakeFiles/tag.dir/mpeg/mpegfile.o -c /home/bradh/coding/kdesupport/taglib/taglib/mpeg/mpegfile.cpp /home/bradh/coding/kdesupport/taglib/taglib/toolkit/tlist.tcc(62): error #308: class template "TagLib::List<T>::ListPrivate [with T=TagLib::ByteVector]" is inaccessible template <class TP> class List<T>::ListPrivate<TP *> : public ListPrivateBase ^ detected during instantiation of class "TagLib::List<T> [with T=TagLib::ByteVector]" at line 36 of "/home/bradh/coding/kdesupport/taglib/taglib/toolkit/tbytevectorlist.h" /home/bradh/coding/kdesupport/taglib/taglib/toolkit/tlist.tcc(62): error #308: class template "TagLib::List<T>::ListPrivate [with T=TagLib::String]" is inaccessible template <class TP> class List<T>::ListPrivate<TP *> : public ListPrivateBase ^ detected during instantiation of class "TagLib::List<T> [with T=TagLib::String]" at line 40 of "/home/bradh/coding/kdesupport/taglib/taglib/toolkit/tstringlist.h" compilation aborted for /home/bradh/coding/kdesupport/taglib/taglib/mpeg/mpegfile.cpp (code 2) make[2]: *** [taglib/taglib/CMakeFiles/tag.dir/mpeg/mpegfile.o] Error 2 make[2]: Leaving directory `/home/bradh/build/kdesupport-build' make[1]: *** [taglib/taglib/CMakeFiles/tag.dir/all] Error 2 make[1]: Leaving directory `/home/bradh/build/kdesupport-build' make: *** [all] Error 2
I'm going to be honest on this one and say "I don't care." I would be a better person if I did, but well, I don't (especially not enough to download the Intel compiler and find a workaround). It's probably a valid bug and I'd certainly be willing to accept a patch, but failing that, it'll probably stay unfixed. Marking as "LATER".
Taglib does not compile with Borland c++ Compiler (CodeGear C++ 5.93 for Win32 Copyright (c) 1993, 2007 CodeGear). The compiler crashes at the same include module "tlist.tcc" as the intel copiler : D:\testTagLib>make MAKE Version 5.2 Copyright (c) 1987, 2000 Borland MAKE Version 5.2 Copyright (c) 1987, 2000 Borland MAKE Version 5.2 Copyright (c) 1987, 2000 Borland MAKE Version 5.2 Copyright (c) 1987, 2000 Borland [ 1%] Building CXX object taglib/CMakeFiles/tag.dir/mpeg/id3v2/id3v2tag.obj CodeGear C++ 5.93 for Win32 Copyright (c) 1993, 2007 CodeGear D:\taglib-1.5\taglib\mpeg\id3v2\id3v2tag.cpp: Fatal F1004 D:\taglib-1.5\taglib\toolkit\tlist.tcc 73: internal compiler error at 0x40216c with base 0x400000 in function ~FrameList::detach<Frame>::detach() Fatal F1004 D:\taglib-1.5\taglib\toolkit\tlist.tcc 73: internal compiler error in function ~FrameList::detach<Frame>::detach() ** error 1 ** deleting taglib\CMakeFiles\tag.dir\mpeg\id3v2\id3v2tag.obj ** error 1 ** deleting taglib\CMakeFiles\tag.dir\all ** error 1 ** deleting all D:\testTagLib> I have had a look at the sourcecode but cannot detect any errors. Also I put semicolons at the end of member functions like : void clear() { list.clear(); }; instead of this : void clear() { list.clear(); } but this doesn t help anyway.
A semi-colon isn't required there. This is actually a bug (crash) in the Borland compiler, not a problem in TagLib's source. If you track down what is causing it I'd consider committing it, but since I don't have access to, or really interest in, the Borland compiler, it's not something I'd put time into myself.
This is still an issue on icpc 13.0 from Intel's Composer XE 2013. I found a fix after speaking with the Intel community on the matter.. http://software.intel.com/en-us/comment/1712496#comment-1712496 The problem seems to come from modules/toolkit/tlist.h, where the following declaration is made:- private: #ifndef DO_NOT_DOCUMENT template <class TP> class ListPrivate; ListPrivate<T> *d; #endif If the above declaration is instead made public, then icpc builds taglib without a hitch. I'm not sure if there are any undesirable implications by changing this declaration to public, or whether a `protected` declaration would be a better fix.. Anyone have any thoughts on this?