Gcc

通過 GCC 編譯定義函式 getline 的 C 程序

  • December 10, 2012

我正在嘗試通過 GCC 編譯一個舊的 C 程序,該程序定義並使用了一個名為 的函式getline,它與 GNU C 庫中的同名函式衝突。你怎麼能編譯它?傳遞-ansi -D_XOPEN_SOURCE_EXTENDED給 GCC 給了我奇怪的錯誤strings.h

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

中的相關行strings.h是:

extern char *index (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));

雖然該-fno-builtin-function選項gcc適用於內置函式,例如mallocand strlen(請參閱GCC 提供的其他內置函式),但它不適用於glibc內置 GNU 擴展,例如該getline函式。

類似於 jw013 的連結指出的一些解決方案,您可以嘗試#define在源文件中插入語句來重命名getline程序定義的函式,例如#define getline my_getline.

這是一個小程式碼範例來說明這種方法。

/*

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;
} 

引用自:https://unix.stackexchange.com/questions/33466