referencia indefinida a `std::ios_base::Init::Init()’

3 minutos de lectura

avatar de usuario
Otro químico

Escribo este código para leer 3 archivos, TM es el tamaño de la matriz cuadrada, LER el número de filas de una matriz y, a partir del último valor, defino una matriz no cuadrada de (ler/2)*2

Luego… el código lee un archivo con algunas relaciones, todos son números y están asignados a C[ler].

Entonces… C.[ler] se asigna a B[ler/2][2].

Esas coordenadas, por fila, en B[ler/2][2] se asignan a a y b.

a y b son la fila y la columna de la matriz A[tm][tm] donde agregar 1.

Mi código falla y no veo cuál es el error.

Cuando trato de compilarlo, el compilador gcc -g -o MatSim MatSim.cpp solicitado:

/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

Además, cuando intento compilarlo, el compilador f77 -o MatSim MatSim.cpp solicitado:

/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

Solución

El problema principal fue un problema de biblioteca, compila tu código usando:

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

¿Sigue sin funcionar? Instalar bibliotecas:

sudo apt-get install g++-multilib

  • ¿El compilador da un error? ¿Está seguro de que está en lo correcto cuando dice “el compilador dio un estado de salida de 1” y no el programa dio un estado de salida de 1?

    – Celeritas

    5 de junio de 2012 a las 23:24

  • Celeritas, sí, esto es lo que recibo justo después de ejecutar cualquiera de los compiladores. [gcc o f77]

    – Otro químico

    5 de junio de 2012 a las 23:27

  • posible duplicado de No se pueden encontrar bibliotecas c ++ en Unix

    –Jonathan Leffler

    6 de junio de 2012 a las 1:51

  • Gracias Jonathan Leffler!!!! ¡Tú y Reinier han aclarado mi código y ahora realmente puedo seguir adelante!

    – Otro químico

    6 de junio de 2012 a las 2:48

avatar de usuario
Reinier Torenbeek

Puedes resolver esto de varias maneras:

  • Utilizar g++ en lugar de gcc: g++ -g -o MatSim MatSim.cpp
  • Agregar -lstdc++: gcc -g -o MatSim MatSim.cpp -lstdc++
  • Reemplazar <string.h> por <string>

Este es un problema del enlazador, no un problema del compilador. El mismo problema está cubierto en la pregunta Error del enlazador iostream: explica lo que está sucediendo.

  • Gracias Reiner… Intenté tu sugerencia y me sale: g++ -g -o MatSim MatSim.cpp -lstdc /usr/bin/ld: no se puede encontrar -lstdc collect2: ld devolvió 1 estado de salida

    – Otro químico

    6 de junio de 2012 a las 2:06

  • Si elige la opción de biblioteca adicional, entonces debe usar -lstdc++no -lstdc. Pero si usa g ++, entonces no es necesario agregar esa biblioteca.

    –Reinier Torenbeek

    6 de junio de 2012 a las 2:17


  • Gracias Reinier!!!! ¡Tú y Jonathan Leffler han aclarado mi código y ahora realmente puedo seguir adelante!

    – Otro químico

    6 de junio de 2012 a las 2:48

  • Creo que esto es un error humano: no es correcto compilar el código c ++ con gcc (en lugar de g ++) (ya que yo mismo lo estaba haciendo mal y busqué en Google aquí 🙂

    – Zac

    18 de septiembre de 2012 a las 13:45

  • Traté de ndk-build en el directorio jni. Creo que su respuesta para un .cpp no ​​para el directorio. ¿Tienes solución?

    – David

    19 de julio de 2020 a las 11:42

La mayoría de estos errores del enlazador se producen debido a la falta de bibliotecas.

agregué el libstdc++.6.dylib en mi Proyecto->Objetivos->Fases de compilación-> Vincular binario con bibliotecas.

Eso me lo resolvió en Xcode 6.3.2 para iOS 8.3

¡Salud!

  • Gracias por compartir esto, hombre. Acabas de solucionar mi problema. Estaba tratando de compilar un objetivo para la prueba de unidad en mi proyecto usando gtest-1.7.0 Framework y Xcode Version 6.3.2.

    –Eduardo Reyes

    23 de julio de 2015 a las 20:49

g++ es equivalente a gcc -xc++ -lstdc++ -shared-libgcc

Recibí un error similar al usar el método sizeof(). Al usar etiquetas g ++ o superiores con gcc, el código se compiló.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad