2011-12-12 1 views
2

J'essaie de compiler mon application pour l'environnement maemo (GNU). Lors de la compilation de l'application normalement, tout fonctionne très bien, mais quand il est compilé par SB2 l'avertissement suivant apparaît:Scratchbox2 renvoie "Déclaration implicite de la fonction getline", parmi d'autres comportements étranges

$ 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' 

Je suis complètement confus quant à la raison pour laquelle cela se produit, il y a d'autres getlines qui fonctionnent dans le programme , j'ai essayé de définir la variable _GNU_SOURCE à la fois à l'intérieur du code et dans la commande du compilateur (pas en même temps) Ceci est la ligne de code qui provoque l'avertissement apparemment:

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 

Toute aide serait appréciée , Merci d'avance.

+0

En outre, l'application ne reconnaît pas correctement la valeur EOF que nous utilisons dans la version de bureau pour détecter quand Ctrl + D est pressé. –

Répondre

1

Modifiez la ligne de votre compilateur pour inclure l'option -E et redirigez la sortie. Le compilateur ne fera que pré-traiter votre fichier lorsque cette option est utilisée. Pour ce faire pour les deux versions, avec et sans sb2. getline() se trouve normalement dans stdio.h. En affichant la sortie prétraite des deux versions, vous devriez pouvoir voir d'où provient getline().

+0

Cela me montre plusieurs "pas de nouvelle ligne à la fin du fichier" (qui montraient aussi plus tôt, mais ils peuvent être manipulés facilement) ainsi qu'un nouvel avertissement: arm-none-linux-gnueabi-gcc: -lm: fichier d'entrée du linker inutilisé parce que la liaison n'est pas faite –

10

Problème résolu, tout ce que je devais faire était ajouter:

#define _GNU_SOURCE 

Dans chaque fichier d'en-tête, avant stdio.h a été inclus, très simple, vraiment. Je suppose que cette information est supposée connue entre les programmeurs comme je ne pouvais la trouver nulle part en ligne, et j'ai dû demander à mon professeur de programmation C personnellement, et même alors nous avons eu quelques problèmes pour tracer la source.

Merci quand même.

+1

Vous ne voulez pas dire '#define _GNU_SOURCE'? – ecbrodie

+1

Non, la faute de frappe fait partie du nom ....

+0

Depuis la glibc 2.10: _POSIX_C_SOURCE> = 200809L || _XOPEN_SOURCE> = 700 – mpgn

Questions connexes