graememcc
graememcc

Reputation: 89

Can't find libstdc++?

I built gcc 4.9.0 from source, and was also planning on building clang 3.4.2, however something seems to have gone awry with regards to libstdc++, as the clang build baled pretty quickly with the linker complaining about various undefined references from std.

Indeed, I then tried compiling and linking the trivial program:

#include <iostream>

int main() {
    std::cout << 42;
}

and again hit linker errors:

/tmp/ccrptgVW.o:temp.cpp:function main: error: undefined reference to 'std::cout'
/tmp/ccrptgVW.o:temp.cpp:function main: error: undefined reference to 'std::ostream::operator<<(int)'
/tmp/ccrptgVW.o:temp.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::Init()'
/tmp/ccrptgVW.o:temp.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

(full gcc -v output), both with my freshly-minted gcc 4.9.0 and my Ubuntu's stock gcc 4.6.3.

libstdc++.so exists, in /usr/local/lib64:

ls /usr/local/lib64/libstd*
  /usr/local/lib64/libstdc++.a
  /usr/local/lib64/libstdc++.so
  /usr/local/lib64/libstdc++.so.6.0.20
  /usr/local/lib64/libstdc++.la
  /usr/local/lib64/libstdc++.so.6
  /usr/local/lib64/libstdc++.so.6.0.20-gdb.py

and this directory appears in LIBRARY_PATH and as an -L argument to collect2 in the verbose gcc output.

How do I restore sanity to my system and have the linker find the shared library?

Upvotes: 0

Views: 5679

Answers (1)

edmz
edmz

Reputation: 8494

As turns out from your comment, you compiled with gcc rather than g++.
Do not take it as an error, as the compilation went fine! What's showing up is a linker error. Indeed, gcc will tell ld to link against the C standard library rather than the C++ standard one.

To solve, either go for g++ directly or pass -lstdc++.

Upvotes: 2

Related Questions