Erro ao vincular o arquivo de cabeçalho padrão no gcc

0

Eu tenho um código simples - isso funciona em outras plataformas, mas não funciona no Ubuntu.

#include <stdio.h>
#include <stdlib.h>
int main()
{
int x=99;
char str[100];
itoa(99, str, 10);
return 0;
}

Tentando compilar usando o terminal no gcc com:

gcc test.c

Mas recebo o erro:

/tmp/ccJN77g6.o: In function 'main':
test.c:(.text+0x35): undefined reference to 'itoa'
collect2: ld returned 1 exit status

Por que isso? protótipo para itoa está incluído no stdlib.h

    
por Sam 05.10.2012 / 20:09

3 respostas

2

itoa não parece ser ANSI C ++ e, portanto, é muito provável que não seja suportado pelo gcc.

De acordo com esta fonte , é sugerida a seguinte alternativa:

This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.

A standard-compliant alternative for some cases may be sprintf:

    sprintf(str,"%d",value) converts to decimal base.
    sprintf(str,"%x",value) converts to hexadecimal base.
    sprintf(str,"%o",value) converts to octal base.

Uma referência sprintf pode ser encontrada aqui .

    
por cauon 05.10.2012 / 20:18
1
A função

itoa não é portátil, não é padrão e a maioria dos compiladores Linux não a suporta.

Em vez disso, você deve usar snprintf() function

Verifique a referência snprintf aqui

#include <stdio.h>
#include <stdlib.h>
int main()
{
int x=99;
char str[100];
// itoa(99, str, 10);
snprintf(str,10,"%d", x);
return 0;
}
    
por devav2 05.10.2012 / 20:19
1

Eu usei o código que você digitou e recebo o mesmo erro. Parece que itoa () não é padrão ANSI C e não funciona com o GCC no Linux (pelo menos a versão que estou usando). Coisas como essa são frustrantes, especialmente se você quiser que seu código funcione em diferentes plataformas (Windows / Linux / Solaris / qualquer outra).

Não é uma função C padrão. Aqui estão alguns links que podem ajudar você a encontrar uma maneira de contornar a função:

link1 Pergunta de estouro de pilha

Espero que ajude.

    
por Vivek Pradhan 05.10.2012 / 20:33