errore linker iostream
Domanda
Ho del vecchio codice C che vorrei combinare con del codice C ++.
Il codice C che un tempo aveva le seguenti include:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "mysql.h"
Ora sto provando a farlo usare C ++ con iostream in questo modo:
#include <windows.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include "mysql.h"
Ma continuo a ricevere i seguenti errori del linker durante la compilazione:
[errore Linker] riferimento indefinito a `std :: string :: size () const '
[errore Linker] riferimento indefinito a `std :: string :: operator [] (unsigned int) const '
[errore Linker] riferimento indefinito a `std :: string :: operator [] (unsigned int) const '
[errore Linker] riferimento indefinito a `std :: string :: operator [] (unsigned int) const '
[Errore linker] riferimento indefinito a `std :: ios_base :: Init :: Init () '
[errore Linker] riferimento indefinito a `std :: ios_base :: Init :: ~ Init () '
ho restituito 1 stato di uscita
Come posso risolvere questo?
Modifica: il mio compilatore è Dev-C ++ 4.9.9.2
Soluzione
L'intestazione C string.h
e l'intestazione C ++ string
non sono intercambiabili.
Nel complesso, tuttavia, il tuo problema è che il file viene compilato correttamente, ma la libreria di runtime errata viene collegata.
Dev-C ++ utilizza GCC. GCC può determinare correttamente la lingua in un file in base all'estensione del file, ma non collegherà la libreria di runtime corretta a meno che non lo si chieda specificamente (-lstdc ++ dalla riga di comando). Chiamare GCC come " g ++ " (o, nel tuo caso, " mingwin32-g ++ ") otterrà anche la lingua giusta e collegherà la libreria necessaria.
Altri suggerimenti
Devi collegarti al tuo runtime C ++. Dipende dalla piattaforma e dal compilatore, ma l'aggiunta di -lC alla linea di collegamento potrebbe farlo.
Quindi potrebbe essere il collegamento usando il compilatore C ++ anziché ld.
In ogni caso, probabilmente dovrai collegarti usando il compilatore C ++ piuttosto che ld se vuoi che il tuo codice C ++ funzioni correttamente - spesso è richiesto che eccezioni e inizializzatori statici funzionino correttamente ...
Ho avuto lo stesso errore esatto quando stavo provando a compilare con Cygwin (g ++).
aggiungi -L / usr / local / bin -L / usr / lib
nelle regole di compilazione e dovrebbe funzionare.
Questo potrebbe essere specifico per Cygwin ma potrebbe anche aiutare a risolvere il tuo problema.