GCC 4.2.0: optimisation appears to break C++ compile/link
Lionel B
lionelbuk@yahoo.co.uk
Tue Jun 19 15:28:00 GMT 2007
Greetings,
I installed GCC 4.2.0 on linux x86_64, configured as follows:
# cd <objdir>
# <srcdir>/configure --prefix=<instdir> --enable-languages=c,c++,fortran
--enable-version-specific-runtime-libs --with-build-time-
tools=<binutilsdir> --with-as=<binutilsdir>/as --with-ld=<binutilsdir>/ld
where:
<objdir> is the build directory
<srcdir> contains GCC 4.2.0 sources,
<instdir> contains the new GCC installation
<binutilsdir> contains binutils binaries (ver 2.17, compiled with system
gcc 3.4.6)
None of <objdir>, <srcdir>, instdir>, <binutilsdir> is a subdir of
another.
make and make install proceeded without any apparent problems.
I have tested the installation on a C++ "Hello world"
// hello.cpp:
#include <iostream>
int main()
{
std::cout << "hello world\n";
return 0;
}
Compiling as:
# <instdir>/g++ hello.cpp -o hello
<binutilsdir>/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
This is fixable by specifying -static-libgcc (or by -L<instdir>/lib/gcc/
x86_64-unknown-linux-gnu/lib64) and the program runs correctly.
(BTW - why should this be necessary? Does it indicate a problem?)
However, if I try to optimise, eg.
# <instdir>/g++ hello.cpp -O -static-libgcc -o hello
the program compiles and links ok, but running it gives:
# ./hello
./hello: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
(required by ./hello)
The same happens at higher optimisation levels. The problem does not
appear to affect C (as opposed to C++) code; eg.
/* hello.c */
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
# <instdir>/gcc hello.c -O -static-libgcc -o hello
yields a correctly functioning program.
I have installed GCC 4.1.2 in exactly the same way and don't see this
problem.
Anyone seen this before?
Regards,
--
Lionel B
More information about the Gcc-help
mailing list