Di mana direktori / usr / include / sys saya?


13

Baru-baru ini saya memutakhirkan dari Kubuntu 12.04 ke 13.04, instal ulang lengkap.

Menggunakan gcc 4.7.3. Saya mengkompilasi beberapa program untuk menemukan tidak ada /usr/include/sysdirektori. Artinya, types.h, stat.h, dll, yang absen. Mereka ada di include/linuxdirektori tetapi tidak include/sys.

Apa yang sedang terjadi?


Apa pesan kesalahan yang dicetak GCC? Harap edit pertanyaan untuk memberikan ini dan informasi lain yang terkait dengan masalah Anda.
edwin

1
Apakah Anda telah menginstal bangunan esensial?
Seth

Beberapa program yang telah saya coba kompilasi dengan baik sehingga tidak ada pesan kesalahan dari gcc. Saya tidak tahu dari mana header itu berasal. Saya memiliki editor yang membangun referensi ke fungsi dan syscall dan sejenisnya dan tidak senang bahwa itu tidak dapat menemukan direktori.
Bebek

1
Ya, build-essential adalah yang terbaru.
Bebek

Jawaban:


13

Jika Anda menggunakan Ubuntu pada 64-bit (Saya tidak bisa mengirim pesan teks sekarang di sistem 32-bit), maka direktori dari pertanyaan tersebut adalah:

/usr/include/x86_64-linux-gnu/sys

Sekarang, dengan memiliki informasi ini, Anda dapat membuat tautan simbolis ke file-file tersebut jika Anda benar-benar membutuhkannya di lokasi itu ( /usr/include/sys) menggunakan ini di terminal:

sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h

# ...etc

Ya, 64 bit. Saya membaca sesuatu yang serupa di tempat lain dan sepertinya semuanya ada di direktori itu, tetapi saya tidak yakin bagaimana header dimasukkan dari "#include sys / stat.h" ke direktori x86_64 / sys. Apakah ini beberapa fitur injeksi gcc baru ketinggalan jaman? Begitu saja, saya tidak melihat adanya symlink atau sejenisnya yang akan (secara eksternal) mengarah pada perilaku ini.
Bebek

Sepertinya kita berpapasan dalam angin. Jadi intinya adalah bahwa kompiler melakukan beberapa sihir tetapi saya mungkin perlu menggunakan beberapa hack symlink untuk membuat editor saya senang?
Bebek

@Duck, saya baru saja mengedit jawaban saya sebelum 2 menit dari komentar Anda :)
Radu Rădeanu

5

instal libc6-dev-amd64 jika Anda bekerja pada linux 64-bit. Ketikkan perintah berikut di terminal ubuntu:

sudo apt-get install libc6-dev-amd64

1

direktori sys adalah direktori header sistem unix / linux dengan banyak perintah sistem. Berbagai merek / versi linux dapat meletakkannya di tempat yang berbeda. Perintah berikut dapat membantu Anda:

find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys

Yang pertama adalah rumah bagi header sistem BSD unix.
Yang kedua adalah direktori yang berisi kepala sistem Linux 64 bit.

Saya mengalami masalah dengan cmake tidak dapat menemukan file sys / stat.h. Solusi sementara saya adalah membuat tautan simbolik

/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h

Saya tidak ingin mencemari direktori / usr / include, dan saya hanya membuat tautan ke satu file header tertentu dan bukan seluruh direktori sys. Saya pikir ini adalah cacat cmake, jadi buat dampak minimal dengan hanya membuat satu tautan. Semoga ini bisa membantu mereka yang menderita masalah yang sama.


1

Mari kita periksa apa default gcc termasuk jalur pencarian. Dari jawaban ini , kita mendapatkan perintah ini:

gcc -xc -E -v -

Di akhir output, saya melihat ini di mesin saya:

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

Perhatikan baris kedua hingga terakhir. Itu berarti bahwa ketika Anda mengompilasi file C #include <sys/stat.h>, gcc akan mencari /usr/include/x86_64-linux-gnu/sys/stat.hsebelum mencoba /usr/include/sys/stat.h, tanpa kita harus symlink apa pun.


0

Karena arsitektur saya adalah amd64, tidak ada libc6-dev-amd64. Paket untuk menginstal adalah libc6-dev-i386.

Itu memperbaiki ketergantungan untuk paket CPAN.


'Karena arsitektur saya adalah amd64, tidak ada libc6-dev-amd64' : apa maksud Anda?
Marc Vanhoomissen

Yang saya maksud adalah, bahwa pada arsitektur x86_64, libraries / kernel / etc. paket memiliki arsitektur amd64. Jadi, libc6-dev-amd64 tidak tersedia untuk diinstal. Masih masalah berlanjut, beberapa perangkat lunak berharap untuk melihat / usr / include / sys /.
Jari Turkia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.