undefinierter Verweis auf `std::ios_base::Init::Init()’

Lesezeit: 3 Minuten

Benutzeravatar von Another.Chemist
Ein anderer.Chemiker

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 definiere aus dem letzten Wert eine nicht quadratische Matrix von (ler/2)*2

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

Dann … C[ler] ist B zugeordnet[ler/2][2].

Diese Koordinaten pro Zeile in B[ler/2][2] sind a und b zugeordnet.

a und b sind die Zeile und die Spalte der Matrix A[tm][tm] wo 1 hinzufügen.

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

Wenn ich versuche, es zu kompilieren, wird der 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, der 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

Funktioniert immer noch nicht? Bibliotheken installieren:

sudo apt-get install g++-multilib

  • Gibt der Compiler einen Fehler aus? Sind Sie sicher, dass Sie richtig liegen, wenn Sie sagen: “Der Compiler hat einen Exit-Status von 1 angegeben” und nicht, dass das Programm einen Exit-Status von 1 angegeben hat?

    – Celeritas

    5. Juni 2012 um 23:24 Uhr

  • Celeritas, ja, das erhalte ich direkt nachdem ich einen der Compiler ausgeführt habe [gcc o f77]

    – Ein anderer.Chemiker

    5. Juni 2012 um 23:27 Uhr

  • mögliches Duplikat von C++-Bibliotheken unter Unix nicht gefunden

    – Jonathan Leffler

    6. Juni 2012 um 1:51 Uhr

  • Danke Jonathan Leffler!!!! Du und Reinier habt meinen Code aufgeklärt und jetzt kann ich wirklich vorwärts gehen!!!!

    – Ein anderer.Chemiker

    6. Juni 2012 um 2:48 Uhr

Benutzeravatar von Reinier Torenbeek
Reinier Torenbeek

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

  • Verwenden g++ Anstatt von gcc: g++ -g -o MatSim MatSim.cpp
  • Hinzufügen -lstdc++: gcc -g -o MatSim MatSim.cpp -lstdc++
  • Ersetzen <string.h> durch <string>

Dies ist ein Linkerproblem, kein Compilerproblem. Das gleiche Problem wird in der Frage „iostream linker error“ behandelt – sie erklärt, was vor sich geht.

  • Danke Reiner … Ich habe deinen Vorschlag ausprobiert und bekomme: g++ -g -o MatSim MatSim.cpp -lstdc /usr/bin/ld: kann nicht gefunden werden -lstdc collect2: ld hat 1 Exit-Status zurückgegeben

    – Ein anderer.Chemiker

    6. Juni 2012 um 2:06 Uhr

  • Wenn Sie sich für die zusätzliche Bibliotheksoption entscheiden, sollten Sie diese verwenden -lstdc++nicht -lstdc. Wenn Sie jedoch g++ verwenden, ist es nicht erforderlich, diese Bibliothek hinzuzufügen.

    – Reinier Torenbeek

    6. Juni 2012 um 2:17 Uhr


  • Danke Reinier!!!! Sie und Jonathan Leffler haben meinen Code erleuchtet und jetzt kann ich wirklich vorankommen!!!!

    – Ein anderer.Chemiker

    6. Juni 2012 um 2:48 Uhr

  • Ich denke, das ist ein menschlicher Fehler: Es ist nicht richtig, C++-Code mit gcc (anstelle von g++) zu kompilieren (wie ich selbst falsch gemacht und hier gegoogelt habe 🙂

    – Zac

    18. September 2012 um 13:45 Uhr

  • Ich habe versucht, ndk-build in das jni-Verzeichnis zu erstellen. Ich denke, Ihre Antwort für eine .cpp nicht für das Verzeichnis. Haben Sie eine Lösung?

    – CleanCoder

    19. Juli 2020 um 11:42 Uhr

Die meisten dieser Linkerfehler treten aufgrund fehlender Bibliotheken auf.

Ich habe die hinzugefügt libstdc++.6.dylib in meinem Projekt->Targets->Build-Phasen->Link Binary With Libraries.

Das hat es für mich auf Xcode 6.3.2 für iOS 8.3 gelöst

Prost!

  • Danke, dass du das geteilt hast, 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.

    – Eduard Reis

    23. Juli 2015 um 20:49 Uhr

g++ entspricht gcc -xc++ -lstdc++ -shared-libgcc

Ich habe einen ähnlichen Fehler bei der Verwendung der Methode sizeof() erhalten. Durch die Verwendung von g++ oder höheren Tags mit gcc wurde der Code kompiliert.

1419870cookie-checkundefinierter Verweis auf `std::ios_base::Init::Init()’

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy