Pergunta

Eu tenho algum código antigo C que eu gostaria de combinar com algum código C ++.

O código de C utilizado para ter tem a seguinte inclui:

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

Agora eu estou tentando fazê-lo usar C ++ com iostream assim:

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

Mas eu continuo recebendo os seguintes erros vinculador quando eu compilar:

[erro Linker] undefined reference to `std :: string :: size () const'

[Linker erro] undefined reference to `std :: string :: operator [] (unsigned int) const'

[Linker erro] undefined reference to `std :: string :: operator [] (unsigned int) const'

[Linker erro] undefined reference to `std :: string :: operator [] (unsigned int) const'

[Ligante erro] referência indefinida para `std :: :: ios_base Init :: Init ()'

[Ligante erro] referência indefinida para `std :: :: ios_base Init :: ~ Init ()'

ld retornou 1 status de saída

Como posso resolver isso?

Edit: Meu compilador é Dev-C ++ 4.9.9.2

Foi útil?

Solução

O cabeçalho C string.h e o C string ++ cabeçalho não são intermutáveis.

No geral, porém, o problema é que o arquivo está sendo devidamente compilado, mas a biblioteca de tempo de execução errada está sendo vinculado em.

Dev-C ++ usa GCC. GCC pode determinar corretamente o idioma em um arquivo com base na extensão do arquivo, mas não vai ligar a biblioteca de tempo de execução direito a menos que você especificamente pedir para ele (-lstdc ++ na linha de comando). Chamando GCC como "g ++" (ou, no seu caso, "mingwin32-g ++") também irá receber a linguagem certa e vai ligar a biblioteca necessários.

Outras dicas

Você precisa ligação contra runtime ++ seu C. Depende da sua plataforma e compilador, mas acrescentando-LC ao seu linkline pode fazê-lo.

Assim, pode ligar usando seu compilador C ++ em vez de ld.

Em qualquer caso, você provavelmente tem a ligação usando o compilador C ++ em vez de ld se você quiser que o seu código C ++ para funcionar corretamente - é muitas vezes necessária para exceções e inicializadores estáticos para funcionar corretamente ...

Eu tenho o mesmo erro exato em que eu estava tentando compilar com Cygwin (g ++).

basta adicionar -L/usr/local/bin -L/usr/lib nas regras de compilação e ele deve funcionar.

Isto pode ser específico para Cygwin, mas pode ajudar a resolver o seu problema também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top