99

I write this code to read 3 files, TM is the size of square matrix, LER the No. of rows of an array and from last value define a non-square matrix of (ler/2)*2

Then... the code read a file with some relations, all are numbers and are assign to C[ler].

Then ... C[ler] is assigned to B[ler/2][2].

Those coordinates, per row, in B[ler/2][2] are assign to a and b.

a and b are the row and the column of the matrix A[tm][tm] where to add 1.

My code crashes and I don't see what the error is.

When I try to compile it, the compiler gcc -g -o MatSim MatSim.cpp prompted:

/usr/include/c++/4.6/iostream:75: undefined reference to `std::ios_base::Init::Init()'
/usr/include/c++/4.6/iostream:75: undefined reference to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status

Also, when I try to compile it, the compiler f77 -o MatSim MatSim.cpp prompted:

/tmp/cc6ewlkf.o: In function `__static_initialization_and_destruction_0(int, int)':
MatSim.cpp:(.text+0x17ad4a): undefined reference to `std::ios_base::Init::Init()'
MatSim.cpp:(.text+0x17ad4f): undefined reference to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status

Solution

The main problem was a library problem, Compile your code using:

 g++ -g -o MatSim MatSim.cpp -lstdc

Still not working? Install libraries:

sudo apt-get install g++-multilib
Eric Leschinski
  • 146,994
  • 96
  • 417
  • 335
Another.Chemist
  • 2,386
  • 3
  • 29
  • 43

3 Answers3

203

You can resolve this in several ways:

  • Use g++ in stead of gcc: g++ -g -o MatSim MatSim.cpp
  • Add -lstdc++: gcc -g -o MatSim MatSim.cpp -lstdc++
  • Replace <string.h> by <string>

This is a linker problem, not a compiler issue. The same problem is covered in the question iostream linker error – it explains what is going on.

Baum mit Augen
  • 49,044
  • 25
  • 144
  • 182
Reinier Torenbeek
  • 16,669
  • 7
  • 46
  • 69
  • Thanks Reiner... I tried your suggestion and I get: _g++ -g -o MatSim MatSim.cpp -lstdc /usr/bin/ld: cannot find -lstdc collect2: ld returned 1 exit status_ – Another.Chemist Jun 06 '12 at 02:06
  • 1
    If you go with the extra library option, then you should use `-lstdc++`, not `-lstdc`. But if you use g++, then it is not necessary to add that library. – Reinier Torenbeek Jun 06 '12 at 02:17
  • Thanks Reinier!!!! you and Jonathan Leffler have enlightment my code and now I can really go forward!!!! – Another.Chemist Jun 06 '12 at 02:48
  • 2
    I think this is an human error: it is not right to compile c++ code with gcc (instead of g++) (as I was doing wrong myself and googled here :) – Zac Sep 18 '12 at 13:45
  • I tried to ndk-build to jni directory. I think your answer for one .cpp not for the directory. Do you have solution? – CleanCoder Jul 19 '20 at 11:42
7

Most of these linker errors occur because of missing libraries.

I added the libstdc++.6.dylib in my Project->Targets->Build Phases-> Link Binary With Libraries.

That solved it for me on Xcode 6.3.2 for iOS 8.3

Cheers!

Arjun Shukla
  • 337
  • 7
  • 10
  • Thanks for sharing this, man. You just solved my problem. I was trying to compiling a target for unity test in my project using gtest-1.7.0 Framework and Xcode Version 6.3.2. – Eduardo Reis Jul 23 '15 at 20:49
2

g++ is equivalent to gcc -xc++ -lstdc++ -shared-libgcc

I was getting a similar error while using sizeof() method. By using g++ or above tags with gcc, the code got compiled.

Deepak Sharma
  • 582
  • 8
  • 10