ไดเร็กทอรีของฉัน / usr / include / sys อยู่ที่ไหน


13

ฉันเพิ่งอัพเกรดจาก Kubuntu 12.04 เป็น 13.04 เป็นการติดตั้งใหม่ทั้งหมด

ใช้ gcc 4.7.3 ฉันรวบรวมบางโปรแกรมเพื่อค้นหาว่าไม่มี/usr/include/sysไดเรกทอรี นั่นคือtypes.h, stat.hฯลฯ ที่ขาด พวกเขามีอยู่ในinclude/linuxไดเรกทอรี include/sysแต่ไม่

เกิดอะไรขึ้น?


ข้อความแสดงข้อผิดพลาดที่ GCC พิมพ์คืออะไร โปรดแก้ไขคำถามเพื่อให้ข้อมูลนี้และข้อมูลอื่น ๆ ที่เกี่ยวข้องกับปัญหาของคุณ
edwin

1
คุณได้สร้างสิ่งจำเป็นติดตั้งแล้วหรือยัง?
เซท

คู่ของโปรแกรมที่ฉันได้ลองรวบรวมได้ดีจึงไม่มีข้อผิดพลาดจาก gcc ฉันไม่สามารถคิดได้ว่าส่วนหัวมาจากไหน ฉันมีโปรแกรมแก้ไขที่สร้างการอ้างอิงไปยังฟังก์ชั่นและ syscall และสิ่งที่คล้ายกันและไม่มีความสุขที่ไม่สามารถค้นหาไดเรกทอรีได้
Duck

1
ใช่สิ่งจำเป็นสำหรับการสร้างนั้นเป็นปัจจุบัน
Duck

คำตอบ:


13

ถ้าคุณใช้ Ubuntu บน 64- บิต (ตอนนี้ฉันไม่สามารถส่งข้อความได้อย่างแน่นอนบนระบบ 32 บิต) ดังนั้นไดเรกทอรีจากคำถามคือ:

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

ขณะนี้มีข้อมูลนี้คุณสามารถสร้างลิงก์สัญลักษณ์ไปยังไฟล์เหล่านั้นถ้าคุณต้องการพวกเขาในตำแหน่งนั้น ( /usr/include/sys) โดยใช้สิ่งนี้ใน 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

ใช่ 64 บิต ฉันอ่านสิ่งที่คล้ายกันที่อื่นและดูเหมือนว่าทุกอย่างอยู่ในไดเรกทอรีนั้น แต่ฉันไม่แน่ใจว่าส่วนหัวได้รับการรวมจาก "#include sys / stat.h" ไปยังไดเรกทอรี x86_64 / sys อย่างไร นี่เป็นคุณสมบัติการฉีด gcc แบบใหม่หรือเปล่า? ฉันไม่เห็น symlink ใด ๆ หรือสิ่งที่คล้ายกันซึ่งจะนำไปสู่พฤติกรรมนี้ (ภายนอก)
Duck

ดูเหมือนว่าพวกเราผ่านสายลมไปแล้ว ดังนั้นสิ่งที่สำคัญที่สุดคือคอมไพเลอร์กำลังทำเวทมนต์อยู่บ้าง แต่ฉันอาจต้องใช้ symlink แฮ็กเพื่อทำให้บรรณาธิการของฉันมีความสุข?
Duck

@Duck ฉันเพิ่งแก้ไขคำตอบของฉันก่อน 2 นาทีของความคิดเห็นของคุณ :)
Radu Rădeanu

5

ติดตั้ง libc6-dev-amd64 หากคุณทำงานกับ linux 64 บิต พิมพ์คำสั่งต่อไปนี้บนเทอร์มินัล ubuntu:

sudo apt-get install libc6-dev-amd64

1

ไดเร็กทอรี sys เป็นไดเร็กทอรีส่วนหัวของระบบ unix / linux ที่มีคำสั่งระบบจำนวนมาก linux ยี่ห้อ / รุ่นที่ต่างกันอาจวางไว้ในที่ต่างกัน คำสั่งต่อไปนี้สามารถช่วยคุณได้:

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

อันแรกคือที่ตั้งของส่วนหัวของระบบ BSD unix
อันที่สองคือไดเร็กทอรีที่มีหัวระบบ Linux 64 บิต

ฉันพบปัญหากับ cmake ไม่สามารถค้นหาไฟล์ sys / stat.h โซลูชันชั่วคราวของฉันคือสร้างลิงก์สัญลักษณ์

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

ฉันไม่ต้องการสร้างมลพิษให้กับไดเรกทอรี / usr / include และฉันจะสร้างลิงก์ไปยังไฟล์ส่วนหัวหนึ่งไฟล์โดยเฉพาะและไม่ใช่ไดเรกทอรี sys ทั้งหมด ฉันคิดว่านี่เป็นข้อบกพร่องของ cmake ดังนั้นสร้างผลกระทบน้อยที่สุดโดยสร้างลิงก์เพียงลิงก์เดียว หวังว่าสิ่งนี้จะช่วยให้ผู้ที่ทุกข์ทรมานจากปัญหาเดียวกัน


1

ตรวจสอบเส้นทางการค้นหาที่เป็นค่าเริ่มต้นของ gcc จากคำตอบนี้เราได้รับคำสั่งนี้:

gcc -xc -E -v -

ในตอนท้ายของผลลัพธ์ฉันเห็นสิ่งนี้ในเครื่องของฉัน:

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

สังเกตเห็นบรรทัดที่สองถึงครั้งสุดท้าย นั่นหมายความว่าเมื่อคุณรวบรวมไฟล์ C ด้วย#include <sys/stat.h>gcc จะค้นหา/usr/include/x86_64-linux-gnu/sys/stat.hก่อนลอง/usr/include/sys/stat.hโดยที่เราไม่ต้องเชื่อมโยงอะไร


0

ตั้งแต่สถาปัตยกรรมของฉันคือ amd64 libc6-dev-amd64ไม่มี libc6-dev-i386แพคเกจการติดตั้งคือ

ที่แก้ไขการพึ่งพาสำหรับแพ็คเกจ CPAN


'เนื่องจากสถาปัตยกรรมของฉันคือ amd64 ไม่มี libc6-dev-amd64' : คุณหมายถึงอะไร
Marc Vanhoomissen

สิ่งที่ฉันหมายถึงคือบนสถาปัตยกรรม x86_64 ไลบรารี / เคอร์เนล / ฯลฯ แพคเกจมีสถาปัตยกรรม amd64 ดังนั้น libc6-dev-amd64 จึงไม่สามารถติดตั้งได้ ยังคงมีปัญหาอยู่ซอฟต์แวร์บางตัวคาดว่าจะเห็น / usr / include / sys /
Jari Turkia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.