Compilando um programa C que define uma função getline pelo GCC

3

Eu estou tentando compilar pelo GCC um programa C antigo que define e usa uma função chamada getline , que entra em conflito com a função de mesmo nome na biblioteca GNU C. Como você pode compilar isso? A passagem de -ansi -D_XOPEN_SOURCE_EXTENDED para o GCC gera erros estranhos em strings.h :

/usr/include/strings.h:74:16: error: expected identifier or '(' before '__extension__'

As linhas relevantes em strings.h são:

extern char *index (__const char *__s, int __c)
 __THROW __attribute_pure__ __nonnull ((1));
    
por Pteromys 05.03.2012 / 13:56

3 respostas

2

Enquanto a opção -fno-builtin-function para gcc funciona para funções internas, como malloc e strlen (consulte Outras funções internas fornecidas pelo GCC ), ele não funciona para glibc extensões GNU incorporadas, como a função getline .

Similar a algumas das soluções apontadas pelo link de jw013, você pode tentar inserir #define declarações nos arquivos fonte para renomear a função getline definida pelo programa, e. g. #define getline my_getline .

Aqui está um pequeno exemplo de código para ilustrar essa abordagem.

/*

gcc -Wall -Wextra -o mystrdup mystrdup.c

./mystrdup

*/

#include <stdio.h> 
#include <string.h>

// mystrdup.c:14: error: conflicting types for 'strdup'
//#define strdup my_strdup

char *strdup(char *str) {
   str = str;
   return str;
}

int main (void) { 
   char *str = 0;
   char mystr[] = "Hello, mystrdup!";
   str = strdup(mystr);
   printf("%s\n", str);
   return 0;
} 
    
por 07.03.2012 / 19:58
2

Na documentação do GCC, a sugestão deles para lidar com esse problema é adicionar o comutador de compilador -ansi porque getline é uma extensão do GCC para ansi.

    
por 10.12.2012 / 21:24
2

Tente:

gcc -fno-builtin-getline ...

Para mais informações, consulte:

man gcc | less -p '-fno-builtin'
    
por 05.03.2012 / 15:15

Tags