У кого-нибудь когда-нибудь был случай, когда unistd.h нельзя найти в Ubuntu?

Я злое время пытаюсь найти ошибку в моей системе. Это буквально
сводит меня с ума.

Система: Ubuntu 16.04 LTS, gcc&g ++ 4.9, 5.3 5.4 доступно.

По сути, я пытался скомпилировать некоторый код для регистрации в облаке точек, я не обновлял свой компьютер, я начал видеть, что Boost по какой-то причине отключил многопоточность, генерируя множество ошибок, которые не могут быть найдены библиотеками потоков. Я отслеживал все в разделе заголовка boost, просматривая определения GLib, я проверил, и, похоже, мои компиляторы не могут видеть unistd.h в gcc или g ++.
Я проверил файлы и все там, но буквально не видно.
Я попытался использовать флаг -I, чтобы компиляторы смотрели в каталоге.

Пример c кодом.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main (int argc, char *argv[])
{
int fd1;
char buf[128];
fd1 = open(argv[1], O_WRONLY | O_CREAT);
if (fd1 == -1) {
perror("File cannot be opened");
return EXIT_FAILURE;
}
scanf("%127s", buf);
write(fd1, buf, strlen(buf));
close(fd1);
return 0;
}

Если я пытаюсь скомпилировать с помощью команды g++ test_unistd.cpp -o mainтогда я получаю

/home/user/test_unistd.cpp: In function ‘int main(int, char**)’:
/home/user/test_unistd.cpp:20:32: error: ‘write’ was not declared in this scope
write(fd1, buf, strlen(buf));
^
/home/user/test_unistd.cpp:22:14: error: ‘close’ was not declared in this scope
close(fd1);

Все файлы, которые я вижу, находятся там, я не могу понять, в чем проблема.

1

Решение

Записывая то, что мы выяснили в комментариях:

Был пустой файл на /usr/local/include/unistd.h в системе ОП. /usr/local содержит неуправляемые файлы (например, вещи, которые вы устанавливаете вручную). Проверка компиляторов /usr/local/include первый (до /usr/include), так что вы можете использовать его для переопределения функциональности системы. Но потому что /usr/local/include/unistd.h был пуст, в том числе это не имело никакого эффекта (за исключением предотвращения реального unistd.h от использования).

Решение: Удалить /usr/local/include/unistd.h, Таким образом, настоящий заголовок в /usr/include/unistd.h можно найти и использовать снова.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]