gpt4 book ai didi

c++ - 有人遇到过在 Ubuntu 上找不到 unistd.h 的情况吗?

转载 作者:行者123 更新时间:2023-11-30 02:25:22 32 4
gpt4 key购买 nike

我正忙着寻找我系统中的错误。从字面上看快把我逼疯了。

系统:Ubuntu 16.04 LTS,gcc&g++ 4.9、5.3 5.4可用。

本质上,我试图为点云注册编译一些代码,但我没有更新我的机器,我开始看到 Boost 出于某种原因禁用了线程,生成了多个无法找到线程库的错误。我回溯到查看 GLib 定义的 boost header 的一部分,我检查了一下,似乎我的编译器在 gcc 或 g++ 中看不到 unistd.h。我检查了文件,一切都在那里,但实际上看不到。我尝试使用 -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);

我能看到的所有文件都在那里,我似乎无法弄清楚问题是什么。

最佳答案

在评论中写下我们的发现:

OP 系统上的 /usr/local/include/unistd.h 中有一个空文件。 /usr/local 包含非托管文件(例如,您手动安装的文件)。编译器首先检查 /usr/local/include(在 /usr/include 之前),因此您可以使用它来覆盖系统功能。但是因为/usr/local/include/unistd.h是空的,include没有效果(除了防止使用真正的unistd.h)。

解决方法:删除/usr/local/include/unistd.h。这样就可以找到并再次使用 /usr/include/unistd.h 中的真实 header 。

关于c++ - 有人遇到过在 Ubuntu 上找不到 unistd.h 的情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44270490/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com