4

アプリケーションを 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'

なぜこれが起こるのか完全に混乱しています。プログラムで機能する他の getlines があります。コード内とコンパイラ コマンドの両方で変数 _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

事前に感謝します。

4

2 に答える 2

20

問題は解決しました。追加するだけで済みました。

#define _GNU_SOURCE

ヘッダー ファイルでは、stdio.hがインクルードされるは、非常にシンプルです。

この情報は、オンラインのどこにも見つけることができず、C プログラミングの教授に個人的に尋ねなければならなかったため、プログラマーの間で知られていると思われますが、それでもソースを追跡するのに苦労しました。

とにかくありがとう。

于 2011-12-13T18:09:32.270 に答える
1

コンパイラ行を変更して-Eオプションを含め、出力をリダイレクトします。このオプションを使用すると、コンパイラはファイルの前処理のみを行います。両方のバージョンでこれを行います。sb2. getline()通常は にあり、なしがありますstdio.hgetline()両方のバージョンから前処理された出力を表示することで、どこから含まれているかを確認できるはずです。

于 2011-12-12T21:40:47.710 に答える