c++ - error de iostream linker
(3)
Tengo un viejo código C que me gustaría combinar con algún código C ++.
El código C que solía tener tiene lo siguiente incluye:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "mysql.h"
Ahora estoy tratando de hacer que use C ++ con iostream así:
#include <windows.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include "mysql.h"
Pero sigo recibiendo los siguientes errores de enlazador cuando compilo:
[Error de enlazador] referencia indefinida a `std :: string :: size () const ''
[Error de enlazador] referencia indefinida a `std :: string :: operator [] (unsigned int) const ''
[Error de enlazador] referencia indefinida a `std :: string :: operator [] (unsigned int) const ''
[Error de enlazador] referencia indefinida a `std :: string :: operator [] (unsigned int) const ''
[Error de 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 resuelvo esto?
Editar: mi compilador es Dev-C ++ 4.9.9.2
Debes enlazar con tu tiempo de ejecución de C ++. Depende de su plataforma y compilador, pero agregar -lC a su línea de enlace podría hacerlo.
Entonces podría vincular el uso de su compilador C ++ en lugar de ld.
En cualquier caso, probablemente tenga que vincular usando el compilador C ++ en lugar de ld si desea que su código C ++ funcione correctamente; a menudo se requiere que las excepciones y los inicializadores estáticos funcionen correctamente ...
El encabezado C string.h
y el encabezado de string
C ++ no son intercambiables.
En general, sin embargo, su problema es que el archivo se compila correctamente, pero la biblioteca de tiempo de ejecución incorrecta se está vinculando.
Dev-C ++ usa 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.
Obtuve el mismo error exacto cuando estaba tratando de compilar con Cygwin (g ++).
simplemente agregue -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.