Thư mục của tôi / usr / include / sys ở đâu?


13

Gần đây tôi đã nâng cấp từ Kubfox 12.04 lên 13.04, cài đặt lại hoàn chỉnh.

Sử dụng gcc 4.7.3. Tôi đã biên soạn một số chương trình để khám phá không có /usr/include/systhư mục. Đó là, types.h, stat.h, vv, vắng mặt. Chúng tồn tại trong include/linuxthư mục nhưng không include/sys.

Chuyện gì đang xảy ra vậy?


Thông báo lỗi mà GCC in là gì? Vui lòng chỉnh sửa câu hỏi để cung cấp thông tin này và các thông tin khác liên quan đến vấn đề của bạn.
edwin

1
Bạn đã xây dựng cài đặt thiết yếu?
Seth

Một vài chương trình tôi đã thử biên dịch tốt nên không có thông báo lỗi từ gcc. Tôi chỉ không thể tìm ra tiêu đề đến từ đâu. Tôi có một trình soạn thảo xây dựng các tài liệu tham khảo cho các chức năng và tòa nhà và những thứ tương tự và thật không vui khi nó không thể tìm thấy thư mục.
Vịt

1
Có, xây dựng là thiết yếu được cập nhật.
Vịt

Câu trả lời:


13

Nếu bạn sử dụng Ubuntu trên 64 bit (tôi không thể nhắn tin chính xác ngay bây giờ trên hệ thống 32 bit), thì thư mục từ câu hỏi là:

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

Bây giờ, có thông tin này, bạn có thể tạo các liên kết tượng trưng đến các tệp đó nếu bạn thực sự cần chúng tại vị trí đó ( /usr/include/sys) bằng cách sử dụng thông tin này trên thiết bị đầu cuối:

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

Có, 64 bit. Tôi đã đọc một cái gì đó tương tự ở nơi khác và có vẻ như mọi thứ đều nằm trong thư mục đó nhưng tôi không chắc chắn làm thế nào các tiêu đề được đưa vào từ thư mục "#include sys / stat.h" vào thư mục x86_64 / sys. Đây có phải là một số tính năng tiêm gcc fangled mới? Tôi không thấy bất kỳ liên kết tượng trưng nào hoặc tương tự như vậy (bên ngoài) sẽ dẫn đến hành vi này.
Vịt

Hình như chúng tôi lướt qua nhau trong gió. Vì vậy, điểm mấu chốt là trình biên dịch đang thực hiện một số phép thuật nhưng tôi có thể cần phải sử dụng một số hack symlink để làm cho trình soạn thảo của mình hài lòng?
Vịt

@Duck Tôi vừa chỉnh sửa câu trả lời của mình trước 2 phút bình luận của bạn :)
Radu Rădeanu

5

cài đặt libc6-dev-amd64 nếu bạn làm việc trên linux 64 bit. Gõ lệnh sau trên thiết bị đầu cuối Ubuntu:

sudo apt-get install libc6-dev-amd64

1

thư mục sys là thư mục tiêu đề hệ thống unix / linux với rất nhiều lệnh hệ thống. Các thương hiệu / phiên bản linux khác nhau có thể đặt nó ở những nơi khác nhau. Lệnh sau có thể giúp bạn:

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

Cái đầu tiên là ngôi nhà của các tiêu đề hệ thống unix BSD.
Cái thứ hai là một thư mục chứa các đầu hệ thống Linux 64 bit.

Tôi gặp vấn đề với cmake không thể tìm thấy tệp sys / stat.h. Giải pháp tạm thời của tôi là tạo một liên kết tượng trưng

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

Tôi không muốn làm ô nhiễm thư mục / usr / include và tôi chỉ tạo một liên kết đến một tệp tiêu đề cụ thể chứ không phải toàn bộ thư mục sys. Tôi nghĩ rằng đây là một khiếm khuyết của cmake, do đó, tạo ra tác động tối thiểu bằng cách chỉ tạo một liên kết. Hy vọng điều này có thể giúp những người đang gặp phải vấn đề tương tự.


1

Hãy kiểm tra đường dẫn tìm kiếm mặc định của gcc là gì. Từ câu trả lời này , chúng tôi nhận được lệnh này:

gcc -xc -E -v -

Ở cuối đầu ra, tôi thấy điều này trên máy của mình:

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

Lưu ý dòng thứ hai đến cuối cùng. Điều đó có nghĩa là khi bạn biên dịch một tệp C #include <sys/stat.h>, gcc sẽ tìm kiếm /usr/include/x86_64-linux-gnu/sys/stat.htrước khi thử /usr/include/sys/stat.h, mà không cần chúng tôi phải liên kết bất cứ điều gì.


0

Vì kiến ​​trúc của tôi là amd64 nên không có libc6-dev-amd64. Gói để cài đặt là libc6-dev-i386.

Điều đó đã cố định sự phụ thuộc cho gói CPAN.


'Vì kiến ​​trúc của tôi là amd64 nên không có libc6-dev-amd64' : ý bạn là gì?
Marc Vanhoomissen

Ý tôi là, trên kiến ​​trúc x86_64, thư viện / kernel / v.v. gói có kiến ​​trúc amd64. Vì vậy, libc6-dev-amd64 không có sẵn để cài đặt. Vẫn còn vấn đề, một số phần mềm mong đợi sẽ thấy / usr / include / sys /.
Jari Turkia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.