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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top