2008-11-05 16 views
13

Tengo un viejo código C que me gustaría combinar con algún código C++.Error iostream linker

El código C solía tener tiene la siguiente incluye:

#include <windows.h> 
#include <stdio.h> 
#include <string.h> 
#include "mysql.h" 

Ahora estoy tratando de hacer que use C++ con iostream como esto:

#include <windows.h> 
#include <stdio.h> 
#include <string> 
#include <iostream> 
#include "mysql.h" 

pero aparece el siguiente errores del enlazador cuando compilo:

[Error del enlazador] referencia indefinida a `std :: string :: size() const '

[error Enlazador] referencia indefinida a `std :: string :: operator [] (unsigned int) const'

[error Enlazador] referencia indefinida a` std :: string :: operator [] (sin signo int) const '

[error Enlazador] referencia indefinida a `std :: string :: operator [] (unsigned int) const'

[error Enlazador] referencia indefinida a` std :: ios_base :: Init :: Init() '

[Error de enlazador] referencia indefinida a `std :: ios_base :: Init :: ~ Init()'

ld devolvió el código de salida 1

¿Cómo puedo solucionar esto?

Editar: Mi compilador es Dev-C++ 4.9.9.2

Respuesta

26

El C string.h encabezado y el encabezado C++ string no son intercambiables.

general, sin embargo, el problema es que el archivo se está compilado correctamente, pero la biblioteca de tiempo de ejecución incorrecta se está ligada en.

Dev-C++ utiliza GCC. GCC puede determinar correctamente el idioma en un archivo basado en la extensión de archivo, pero no enlazará la biblioteca de tiempo de ejecución correcta a menos que específicamente lo solicite (-lstdC++ en la línea de comandos). Llamar a GCC como "g ++" (o, en su caso, "mingwin32-g ++") también obtendrá el idioma correcto y vinculará la biblioteca necesaria.

3

es necesario enlazar en contra de su tiempo de ejecución C++. Depende de su plataforma y compilador, pero agregar -lC a su línea de enlace podría hacerlo.

Podría vincular el uso de su compilador C++ en lugar de ld.

En cualquier caso, es probable que tenga para enlazar con el compilador de C++ en lugar de LD si desea que su código C++ para que funcione correctamente - A menudo se requiere para las excepciones y inicializadores estáticos para trabajar correctamente ...

+0

¿No '-lc' vinculará con' libc' que es una biblioteca de tiempo de ejecución de C, no C++? Para C++, se necesita vincular con la Biblioteca Estándar de C++, 'libstdC++', usando el parámetro '-lstdC++' a 'gcc' (o simplemente usando' g ++ 'que lo hace automáticamente). No trates de ayudar si no sabes cómo, porque también puedes hacer una travesura. – SasQ

+0

Especifiqué -lC, que es el tiempo de ejecución C++ en algunos unixes, no -lc. Mi segundo párrafo también indicó que el OP podría vincularse utilizando el compilador C++, que proporcionaría las bibliotecas y configuraciones correctas para la plataforma. –

1

Obtuve el mismo error cuando estaba intentando compilar con Cygwin (g ++).

acaba de agregar -L/usr/local/bin -L/usr/lib en las reglas de compilación y debería funcionar.

Esto puede ser específico de Cygwin pero también podría ayudar a resolver su problema.

Cuestiones relacionadas