cpp linux unistd.h,任何人都有在Ubuntu上找不到unistd.h的情况?

博主在Ubuntu 16.04 LTS系统中遇到编译问题,gcc/g++找不到unistd.h头文件,导致点云注册代码编译失败。尽管unistd.h文件存在,但编译器仍报告找不到'write'和'close'函数。尝试使用-I标志指定头文件路径未解决问题。错误并非直接指向unistd.h缺失,而是与Boost线程库和C++重载有关。讨论可能的解决方案和排查步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个邪恶的时间试图找到我的系统中的错误。这实际上是 让我发疯。系统:Ubuntu 16.04 LTS,gcc & g ++ 4.9,5.3 5.4可用。任何人都有在Ubuntu上找不到unistd.h的情况?

本质上我试图为点云注册编译一些代码,我没有更新我的机器,我开始看到Boost出于某种原因禁用了线程,产生了多个错误,无法找到线程库。我回头追踪了一部分boost代码,看GLib的定义,我查了一下,似乎我的编译器在gcc或g ++中看不到unistd.h。 我检查了文件,一切都在那里,但从字面上看不到。 我尝试使用-I标志来让编译器在目录中查找。

示例c代码。

#include

#include

#include

#include

#include

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

'g ++ -E test_unistd.cpp -o test_unistd.i'产生了什么? –

+3

你得到的错误并不是说找不到'unistd.h',所以头文件出现在你的系统上。该错误表示无法找到“写入”和“关闭”功能。 –

+0

顺便说一句,C不是C++ ...如果这是C++代码,你可能会遇到编译器寻找重载的问题...你正在传递的参数可能需要Casting ... –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值