help!g++ compiling failed when application ported from RH 7.3 to FC3

Matthew Saltzman mjs at ces.clemson.edu
Mon Jul 4 20:06:07 UTC 2005


On Mon, 4 Jul 2005, Yang Shuichao wrote:

>
> I am a new bie to C++ programming under Linux.I am requried to port some 
> software from Redhat linux 7.3(with g++ version 2.9.6) to fedora core 
> three(with g++ version 3.4.2). The original source code was complied 
> successfully in Redhat but failed under fedora.I found the system header 
> files included in my software were implemented differently in these two 
> system and even their PATH are different too. I copied from Redhat all 
> the header files to my fedora system and recompiled them under fedora 
> with the same options used in redhat, but still got many many errors 
> like below: ./usrinclude/g++-3/std/straits.h:108: error: an explicit 
> specialization must be preceded by 'template <>' 
> ./usrinclude/pthread.h:163: error: expected `,' or `...' before 
> "__thread" ./usrinclude/pthread.h:591: error: storage class specifiers 
> invalid in parameter declarations ./usrinclude/pthread.h:591: error: 
> storage class specified for parameter `parameter'
>
> ./usrinclude/g++-3/stl_alloc.h:701: error: expected constructor, destructor, or type conversion before '*' token
> ./usrinclude/g++-3/stl_alloc.h:701: error: expected `;' before '*' token
> ./usrinclude/g++-3/stl_alloc.h:961: error: non-template `rebind' used as template
>
> What shall I do?  Can anybody help me? Great thanks.

If you are compiling with gcc-3.4, you must use the gcc-3.4 system 
headers.  Also, you should never use these "hidden" header files such as 
straits.h and stl_alloc.h that you mention (though you may see references 
to them from standard header files that you did include, if you included 
2.96 versions).

There are some significant changes between g++-2.96 and gcc-3.4 in terms 
of how strictly the compiler enforces standard langauge constructs.  If 
you had a program that compiled under 2.96 and doesn't under 3.4, it is 
likely that the program contains incorrect C++ and you'll have to go 
through with a recent C++ book and correct the errors.

In FC3, there were compat-gcc and compat-libstdc++ packages that (IIRC) 
still compiled 2.96 code.  A *temporary* solution would be to install 
those packages and compile your app with them.  But in the long run, you 
will need to fix your code to conform to standard C++.

-- 
 		Matthew Saltzman

Clemson University Math Sciences
mjs AT clemson DOT edu
http://www.math.clemson.edu/~mjs




More information about the fedora-list mailing list