Scratchbox2 возвращает «неявное объявление функции getline», среди прочего странного поведения - PullRequest
3 голосов
/ 13 декабря 2011

Я пытаюсь кросс-компилировать свое приложение для среды maemo (GNU).При нормальной компиляции приложения все работает нормально, однако, когда оно скомпилировано с помощью sb2, появляется следующее предупреждение:

$ sb2 gcc -D_GNU_SORCE -o app -Wall -g -I.......//don't think this is relevant

 In file included from wifi_collector_menu.c:50:
 wifi_collector_list.c: In function `show_net_apns':
 wifi_collector_list.c:777: warning: implicit declaration of function `getline'

Я совершенно сбит с толку относительно того, почему это происходит, есть другие getline, которые работают вПрограмма, я попытался определить переменную _GNU_SOURCE как внутри кода, так и в команде компилятора (не одновременно). Это строка кода, которая, по-видимому, вызывает предупреждение:

size_t bytesnum = MAX_ESSID;
size_t bytes_read;
char *netname = NULL;
printf("Enter name of selected network:");
bytes_read=getline(&netname,&bytesnum,stdin);//This line

Любая помощь будетБудем благодарны, спасибо заранее.

Ответы [ 2 ]

15 голосов
/ 13 декабря 2011

Проблема решена, все, что мне нужно было сделать, это добавить:

#define _GNU_SOURCE

В каждом заголовочном файле, до включения stdio.h, очень просто на самом деле.

Полагаю, эта информация, как полагают, известна между программистами, поскольку я не мог найти ее где-либо в Интернете, и мне пришлось лично спросить моего профессора по программированию на Си, и даже тогда у нас возникли некоторые проблемы с поиском источника.

В любом случае, спасибо.

1 голос
/ 13 декабря 2011

Измените строку компилятора, чтобы включить параметр -E, и перенаправьте вывод.Компилятор будет предварительно обрабатывать ваш файл только при использовании этой опции.Делать это для обеих версий, с sb2. getline() и без него обычно можно найти в stdio.h.Просматривая предварительно обработанные выходные данные обеих версий, вы сможете увидеть, откуда включается getline().

...