2009-07-12 8 views
2

Je suis en train de compiler un paquet C++ pré-existant sur ma machine léopard mac osx, et obtenir l'erreur suivante:compiler le code C++ en utilisant gnu/c getline() sur mac osx?

 
    error: no matching function for call to 'getline(char**, size_t*, FILE*&)' 

Ceci est probablement dû getline() est une extension spécifique GNU. Puis-je faire en sorte que le compilateur g ++ osx par défaut reconnaisse de telles extensions spécifiques à GNU?

(sinon, je pourrais toujours fournir ma propre mise en œuvre ou GNUs original, mais je préfère avoir une solution « plus propre » si possible)

Répondre

5

getline est défini dans stdio.h en version glibc 2.10 et plus tard, mais pas dans les versions antérieures, ni (jusqu'à présent, ajouté 10.5 n'a certainement pas getline et 10.7 n'a certainement) dans le BSD dérivé de la libc.

La modification dans les bibliothèques GNU est survenue en raison d'une modification de la norme POSIX 2008, qui inclut désormais getline.

Probablement, cela se propagera à d'autres libc au fil du temps. En attendant, je comprends que cela cause des problèmes à beaucoup de projets.

Vous pouvez download a stand alone version from GNU.

1

Généralement, la solution consiste à utiliser autoconf ou un outil similaire pour déterminer si la plate-forme actuelle a déjà getline et ne fournir votre propre définition qu'en cas de besoin.

Exemple:

# configure.ac 
AC_CHECK_FUNCS([getline]) 

// compat.h 
#include "config.h" 
#ifndef HAVE_GETLINE 
ssize_t getline(char **lineptr, size_t *n, FILE *stream); 
#endif 

// getline.c 
ssize_t getline(char **lineptr, size_t *n, FILE *stream) { 
    /* definition */ 
} 

# Makefile.am 
program_LDADD = $(if $(HAVE_GETLINE),,getline.o) 

ou quelque chose le long de ces lignes, vous devrez ajuster pour correspondre à votre propre programme.

Questions connexes