2012-06-05 25 views
45

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 del último valor define una matriz no cuadrada de (ler/2) * 2referencia indefinida a `std :: ios_base :: Init :: Init() '

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

Entonces ... C [ler] está asignado a B [ler/2] [2].

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

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

mi código se bloquea y no veo cuál es el error.

Cuando intento compilar, el compilador gcc -g -o MatSim MatSim.cpp se le solicite:

/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 compilar, el compilador f77 -o MatSim MatSim .cpp incitó:

/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 principal problema era un problema de biblioteca. Compila tu código usando:

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

¿Todavía no estás trabajando? Instalar bibliotecas:

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

¿El compilador da un error? ¿Estás seguro de que estás en lo correcto al decir "el compilador dio un estado de salida de 1" y que el programa no dio un estado de salida de 1? – Celeritas

+0

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

+0

posible duplicación de [No se pueden encontrar bibliotecas de C++ en Unix] (http: // stackoverflow.com/questions/10867164/cant-find-c-libraries-on-unix) –

Respuesta

88

Puede resolver esto de varias maneras:

  • Uso g++ en lugar de gcc: g++ -g -o MatSim MatSim.cpp
  • Añadir -lstdc++: gcc -g -o MatSim MatSim.cpp -lstdc++
  • Reemplazar <string.h> por <string>

Este es un problema de vinculador, no un problema del compilador. El mismo problema se trata en la pregunta iostream linker error - explica lo que está sucediendo.

+0

Reiner ... he intentado su sugerencia y me sale: _g ++ -g -o MatSim MatSim.cpp -lstdc /usr/bin/ld: no puede encontrar -lstdc collect2: ld devolvió 1 salida Status_ –

+0

Si vas con la opción de la biblioteca adicional, entonces debes usar '-lstdC++', no '-lstdc'. Pero si usa g ++, entonces no es necesario agregar esa biblioteca. –

+0

Gracias Reinier !!!! ¡tú y Jonathan Leffler han iluminado mi código y ahora puedo avanzar! –

6

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

He añadido el libstdC++. 6.dylib en mi proyecto-> Objetivos-> Fases de compilación-> Enlace binario con bibliotecas.

Eso lo resolvió para mí en Xcode 6.3.2 para iOS 8.3

Salud!

+0

Gracias por compartiendo esto, hombre. Acabas de resolver mi problema. Estaba intentando compilar un objetivo para la prueba de unidad en mi proyecto usando gtest-1.7.0 Framework y Xcode Version 6.3.2. –

+0

Me alegro de que funcionó :) –

+0

gracias, amigo, funcionó :) salvó mi tiempo –