2017-05-30 10 views
1

私のシステムでバグを見つけようと邪魔になりました。それは文字通り 私を怒らせる。Ubuntuでunistd.hが見つからない人はいますか?

システム:Ubuntu 16.04 LTS、gcc & g ++ 4.9、5.3 5.4利用可能です。

私はポイントクラウド登録用のコードをコンパイルしようとしていましたが、マシンを更新しなかったため、何らかの理由で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); 

すべてのファイルは、私は問題が何であるかを見つけ出すように見えることはできません、があります。

+1

'g ++ -E test_unistd.cpp -o test_unistd.i'は何を生成しますか? – melpomene

+3

あなたが持っているエラーは、 'unistd.h'が見つからないとは言わないので、あなたのシステムにヘッダが存在しています。エラーは 'write'と' close'関数を見つけることができないと言っています。 – Macmade

+0

ところで、CはC++ではありません...これはC++コードの場合、オーバーロードを探しているコンパイラに問題があるかもしれません...渡す引数にキャストが必要な場合があります... – Macmade

答えて

1

我々はコメントで考え出したものをアップ執筆:

OPのシステム上の/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にある実際のヘッダーを見つけて再び使用することができます。

関連する問題