компиляция кода C ++ с использованием gnu / c getline () на Mac OSX? - PullRequest
2 голосов
/ 13 июля 2009

Я пытаюсь скомпилировать уже существующий пакет c ++ на моем компьютере Mac OSX Leopard и получить следующую ошибку:

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

Это, вероятно, потому что getline () является специфическим расширением GNU.

Можно ли как-нибудь заставить компилятор g ++ по умолчанию для osx распознавать такие специфичные для GNU расширения?

(если нет, я всегда мог бы предоставить собственную реализацию или исходную версию GNU, но я предпочитаю иметь "более чистое" решение, если это возможно)

Ответы [ 3 ]

5 голосов
/ 13 июля 2009

getline определено в stdio.h в glibc версии 2.10 и более поздних, но не в более ранних версиях и не (пока; добавлено 10.5 определенно не имеет getline, а 10.7 определенно делает) в производной от BSD libc.

Изменение в библиотеках GNU произошло из-за изменения в стандарте POSIX 2008, который теперь включает getline.

Предположительно, это распространится на другие libc с течением времени. В то же время я понимаю, что это создает проблемы для многих проектов.

Вы можете загрузить автономную версию из GNU .

1 голос
/ 13 июля 2009

Как правило, решение состоит в том, чтобы использовать autoconf или какой-либо аналогичный инструмент для определения того, имеет ли текущая платформа getline или нет, и предоставлять свое собственное определение только при необходимости.

Пример:

# 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)

или что-то в этом духе, вам придется настроить его в соответствии с вашей собственной программой.

0 голосов
/ 13 июля 2009

Я не уверен, что когда-либо видел здесь конкретное определение 'getline', которое, как мне известно, использует потоки + строки c ++.

http://www.cplusplus.com/reference/string/getline/

...