Installing GCC 4.9.0 breaks GCC 4.8.2 when using -static-libstdc++

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,
Some time ago I built and installed GCC 4.8.2 via:
$ ../gcc-4.8.1/configure --program-suffix=481 --enable-languages=c,c++,lto
$ make bootstrap
$ sudo make install

Recently, I built and installed GCC 4.9.0:

$ ../configure --program-suffix=490 --enable-languages=c,c++
--with-isl=/usr/local --with-cloog=/usr/local
$ make bootstrap
$ sudo make install

Now building C++ programs using std::async/std::future with g++482 fails :

$ g++482 -v -coverage -g -Wl,--build-id -L/usr/local/lib64
-L/usr/local/lib   lookup.o api.a  -static-libstdc++ -static-libgcc
-l:libboost_date_time.a  -o lookup
Using built-in specs.
COLLECT_GCC=g++482
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.8.2/configure --program-suffix=482
--enable-languages=c,c++,lto
Thread model: posix
gcc version 4.8.2 (GCC)
COMPILER_PATH=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/:/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/:/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/
LIBRARY_PATH=/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib64/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-linux-gnu/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-coverage' '-g' '-L/usr/local/lib64'
'-L/usr/local/lib' '-static-libgcc' '-o' 'lookup' '-mtune=generic'
'-march=x86-64'
 /usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/collect2
--eh-frame-hdr -m elf_x86_64 -dynamic-linker
/lib64/ld-linux-x86-64.so.2 -o lookup /usr/lib/x86_64-linux-gnu/crt1.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/crtbegin.o
-L/usr/local/boost/lib -L/usr/local/lib64 -L/usr/local/lib
-L/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2
-L/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib64
-L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu
-L/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../..
--build-id lookup.o api.a  -l:libboost_date_time.a  -Bstatic -lstdc++
-Bdynamic -lm -lgcov -lgcc -lgcc_eh -lc -lgcc -lgcc_eh
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/crtend.o
/usr/lib/x86_64-linux-gnu/crtn.o
/usr/local/include/c++/4.8.2/future:1439: error: undefined reference
to 'std::__future_base::_State_base::~_State_base()'
/usr/local/include/c++/4.8.2/future:1439: error: undefined reference
to 'std::__future_base::_State_base::~_State_base()'
/usr/local/include/c++/4.8.2/future:1439: error: undefined reference
to 'std::__future_base::_State_base::~_State_base()'
/usr/local/include/c++/4.8.2/future:1439: error: undefined reference
to 'std::__future_base::_State_base::~_State_base()'
/usr/local/include/c++/4.8.2/future:317: error: undefined reference to
'vtable for std::__future_base::_State_base'
/usr/local/boost/lib/libboost_date_time.a(greg_month.o):greg_month.cpp:function
non-virtual thunk to
boost::exception_detail::error_info_injector<boost::gregorian::bad_month>::~error_info_injector():
warning: relocation refers to discarded section
collect2: error: ld returned 1 exit status

This seems to be due to libstdc++.a from 4.9.0 (which doesn't contain
the string State_base) having overwritten the one from 4.8.2 (which
does).

This is the only binary which needs -static-libstdc++ -static-libgcc .
Other binaries (using libstdc++.so) build correctly.

Is this not a supported configuration? Do I have to give up on
switching back and forth between 4.8.2 and 4.9.0?

Csaba
P.S. Please CC me, I'm not subscribed to the list.
-- 
GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++
The Tao of math: The numbers you can count are not the real numbers.
Life is complex, with real and imaginary parts.
"Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds
"People disagree with me. I just ignore them." -- Linus Torvalds





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux