/ Usr / include / sys dizinim nerede?


14

Kısa bir süre önce Kubuntu 12.04'ten 13.04'e yükseltme yaptım.

Gcc kullanımı 4.7.3. /usr/include/sysDizin olmadığını keşfetmek için bazı programlar derledim . Olduğunu, types.h, stat.h, vb yoktur. Dizinde varlar include/linuxama yoklar include/sys.

Neler oluyor?


GCC'nin yazdırdığı hata mesajı nedir? Bu soruyu ve sorununuzla ilgili diğer bilgileri sağlamak için lütfen soruyu düzenleyin .
edwin

1
Temel kurulumunuz var mı?
Seth

Ben denedim birkaç program gcc hiçbir hata mesajı böylece iyi derlemek. Başlığın nereden geldiğini anlayamıyorum. Ben fonksiyonları ve syscall ve benzeri referanslar inşa editör var ve dizini bulamıyor mutlu değil.
Ördek

1
Evet, yapı temel günceldir.
Ördek

Yanıtlar:


14

64-bit Ubuntu kullanıyorsanız (Ben şimdi 32-bit bir sistemde tam olarak metin olamaz), o zaman soru dizini:

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

Şimdi, bu bilgilere sahip olarak /usr/include/sys, bir terminalde kullanarak bu konuma ( ) gerçekten ihtiyacınız varsa bu dosyalara sembolik bağlantılar oluşturabilirsiniz :

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

Evet, 64 bit. Başka bir yerde benzer bir şey okumak ve her şey bu dizinde olduğu gibi görünüyor ama başlıkların "#include sys / stat.h" x86_64 / sys dizinine nasıl dahil olduğundan emin değilim. Bu yeni bir kanatlı gcc enjeksiyon özelliği mi? Off-el (harici olarak) bu davranışa yol açacak herhangi bir sembolik veya benzeri görmüyorum.
Ördek

Birbirimizi rüzgarda geçtik gibi görünüyor. Sonuç olarak, derleyici biraz sihir yapıyor ama editörümü mutlu etmek için bazı symlink kesmek kullanmam gerekebilir?
Ördek

@Duck Cevabınızı yorumlarınızdan 2 dakika önce düzenledim :)
Radu Rădeanu

5

64 bit linux üzerinde çalışıyorsanız libc6-dev-amd64'ü kurun. Ubuntu terminaline aşağıdaki komutu yazın:

sudo apt-get install libc6-dev-amd64

1

sys dizini, birçok sistem komutuna sahip bir unix / linux sistem başlık dizinidir. Farklı markalar / sürüm linux farklı yerlere koyabilir. Aşağıdaki komut size yardımcı olabilir:

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

İlki BSD unix sistem başlıklarına ev sahipliği yapar.
İkincisi, Linux 64 bit sistem kafalarını içeren bir dizindir.

Cmake sys / stat.h dosyasını bulamamak ile ilgili sorunlar ile karşılaşıyorum. Geçici çözümüm sembolik bir bağlantı kurmak

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

/ Usr / include dizinini kirletmek istemiyorum ve tüm sys dizinine değil, yalnızca belirli bir başlık dosyasına bağlantı yapıyorum. Bence bu cmake'nin bir kusuru, bu yüzden sadece bir bağlantı yaparak minimum etki yaratıyor. Umarım bu aynı sorundan muzdarip olanlara yardımcı olabilir.


1

Şimdi gcc'nin varsayılan arama yolunu ekle'yi kontrol edelim. Gönderen bu cevap , biz bu komutu almak:

gcc -xc -E -v -

Çıktının sonunda, bunu makinemde görüyorum:

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

İkinci ile son arasındaki satıra dikkat edin. Bu, bir C dosyasını derlediğinizde #include <sys/stat.h>, gcc /usr/include/x86_64-linux-gnu/sys/stat.hdenemeden önce /usr/include/sys/stat.h, herhangi bir şey symlink'lememiz gerekmeden arayacaktır .


0

Mimarim amd64 olduğu için hayır libc6-dev-amd64. Yüklenecek paket libc6-dev-i386.

Bu bir CPAN paketine olan bağımlılığı düzeltti.


'Mimarım amd64 olduğundan libc6-dev-amd64 yoktur' : ne demek istiyorsun?
Marc Vanhoomissen

Demek istediğim, x86_64 mimarisi, kütüphaneler / çekirdek / vb. paketleri amd64 mimarisine sahiptir. Bu nedenle, libc6-dev-amd64 yüklenemez. Yine de sorun devam ediyor, bazı yazılımlar / usr / include / sys / komutunu görmeyi bekliyor.
Jari Turkia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.