Gcc
通過 GCC 編譯定義函式 getline 的 C 程序
我正在嘗試通過 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
適用於內置函式,例如malloc
andstrlen
(請參閱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; }