2012-06-05 19 views
45

Ich schreibe diesen Code, um 3 Dateien zu lesen, TM ist die Größe der quadratischen Matrix, LER die Anzahl der Zeilen eines Arrays und vom letzten Wert Definieren Sie eine nichtquadratische Matrix von (ler/2) * 2undefined Verweis auf `std :: ios_base :: Init :: Init() '

Dann ... liest der Code eine Datei mit einigen Beziehungen, alle sind Zahlen und werden C [ler] zugewiesen.

Dann ... wird C [ler] B [ler/2] [2] zugewiesen.

Diese Koordinaten pro Zeile in B [ler/2] [2] werden a und b zugewiesen.

a und b die Zeile und die Spalte der Matrix A [tm] [tm], wo 1.

Mein Code stürzt hinzuzufügen und ich sehe nicht, was der Fehler ist.

Wenn ich versuche, es zu kompilieren, die Compiler gcc -g -o MatSim MatSim.cpp aufgefordert:

/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 

Auch wenn ich versuche, es zu kompilieren, die Compiler f77 -o MatSim MatSim CPP aufgefordert:

/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 

Lösung

Das Hauptproblem war ein Bibliotheksproblem, kompilieren Sie Ihren Code mit:

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

Immer noch nicht funktioniert? Installieren Bibliotheken:

sudo apt-get install g++-multilib 
+0

Gibt der Compiler einen Fehler? Sind Sie sicher, dass Sie richtig sind, wenn Sie sagen, dass "der Compiler den Exit-Status 1 hat" und das Programm nicht den Exit-Status 1 hat? – Celeritas

+0

Celeritas, ja, das ist, was ich bekomme, nachdem ich einen der Compiler ausgeführt habe [gcc o f77] –

+0

möglich duplicate von [Kann C++ Bibliotheken unter Unix nicht finden] (http: // stackoverflow.com/Fragen/10867164/cant-find-c-Bibliotheken-on-Unix) –

Antwort

88

Sie können dies auf verschiedene Arten lösen:

  • Verwendung g++ anstelle von gcc: g++ -g -o MatSim MatSim.cpp
  • -lstdc++ hinzufügen: gcc -g -o MatSim MatSim.cpp -lstdc++
  • ersetzen <string.h> von <string>

Dies ist ein Linker-Problem, kein Compiler-Problem. Das gleiche Problem wird in der Frage iostream linker error behandelt - es erklärt, was vor sich geht.

+0

Dank Reiner ... habe ich versucht, Ihren Vorschlag, und ich bekomme: _g ++ -g -o MatSim MatSim.cpp -lstdc /usr/bin/ld: nicht finden können, -lstdc collect2: ld returned 1 exit STATUS_ –

+0

Wenn Sie mit der Option für zusätzliche Bibliotheken arbeiten, sollten Sie '-lstdC++', nicht '-lstdc' verwenden. Wenn Sie jedoch g ++ verwenden, ist es nicht notwendig, diese Bibliothek hinzuzufügen. –

+0

Danke Reinier !!!! Du und Jonathan Leffler haben meinen Code aufgeklärt und jetzt kann ich wirklich weitermachen !!!! –

6

Die meisten dieser Linkfehler treten aufgrund fehlender Bibliotheken auf.

ich hinzugefügt, um die libstdC++. 6.dylib in meinem Ausbau-> Targets-> Build Phases-> Link Binary mit Bibliotheken.

, dass es für mich auf Xcode 6.3.2 für iOS 8.3

Beifall gelöst!

+0

Danke für das teilen, Mann. Du hast gerade mein Problem gelöst. Ich habe versucht, ein Ziel für den Einheitstest in meinem Projekt mit gtest-1.7.0 Framework und Xcode Version 6.3.2 zu kompilieren. –

+0

Froh, es hat funktioniert :) –

+0

danke dir Kumpel es hat funktioniert :) hat meine Zeit gerettet –