getline()
можно использовать двумя различными способами:
Для использования 1. инициализируйте переданный указатель, чтобы указать на действительную память, и передайте также размер последней.
#define INITIAL_SIZE (42)
int main(void)
{
char * buffer = malloc(INITIAL_SIZE * sizeof *buffer);
size_t bufsize = INITIAL_SIZE;
ssize_t characters = getline(&buffer, &bufsize, stdin);
if (-1 == characters)
{
/* handle error. */
}
else
{
/* use buffer */
}
free(buffer); /* Free buffer. */
}
Для использования 2. инициализируйте указатель, переданный NULL
, и передайте 0
как размер.
int main(void)
{
char * buffer = NULL;
size_t bufsize = 0;
ssize_t characters = getline(&buffer, &bufsize, stdin);
if (-1 == characters)
{
/* handle error. */
}
else
{
/* use buffer */
}
free(buffer); /* Free buffer. */
}
Примечание: getline()
возвращает ssize_t
, а не size_t
.
Запустите настройку с - enable-shared
. Затем -fPIC
будет включен как часть общих флагов.
Я получил его работающий путем добавления -fPIC
после CC= gcc -pthread
, т.е. CC= gcc -pthread -fPIC
в Make-файле.
./configure --help
, возможно передавая по каналу к grep PIC, чтобы видеть, существует ли опция включить это , Если ни один из тех не работает, необходимо прочитать настраивать код и понять условия, на которые это тестирует лучше.
Разве это не CCFLAGS
? (Не были то, что сторона мира некоторое время.)
Как отмечалось в другом месте, запуск configure с --enable-shared должен привести к включению -fPIC во флаги компилятора. Однако вы все равно можете увидеть ошибку «не удалось прочитать символы», если попытаетесь выполнить параллельную сборку, например, с помощью make -j8. У меня была такая же ошибка в RHEL 5.2, и она исчезла, только когда я удалил '-j8' из моего вызова make ...