Я злое время пытаюсь найти ошибку в моей системе. Это буквально
сводит меня с ума.
Система: 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);
Все файлы, которые я вижу, находятся там, я не могу понять, в чем проблема.
Записывая то, что мы выяснили в комментариях:
Был пустой файл на /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
можно найти и использовать снова.
Других решений пока нет …