我有一個邪惡的時間試圖找到我的系統中的錯誤。這實際上是 讓我發瘋。系統: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 <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);
我所看見的是那裏的文件,我似乎無法找出問題所在。
'g ++ -E test_unistd.cpp -o test_unistd.i'產生了什麼? – melpomene
你得到的錯誤並不是說找不到'unistd.h',所以頭文件出現在你的系統上。該錯誤表示無法找到「寫入」和「關閉」功能。 – Macmade
順便說一句,C不是C++ ...如果這是C++代碼,你可能會遇到編譯器尋找重載的問題...你正在傳遞的參數可能需要Casting ... – Macmade